【问题标题】:Running python script inside ipython在 ipython 中运行 python 脚本
【发布时间】:2012-07-29 11:02:11
【问题描述】:

是否可以从 ipython 内部运行 python 脚本(不是模块)而不指示其路径?我试图设置 PYTHONPATH 但它似乎只适用于模块。 我要执行

%run my_script.py

不在包含文件的目录中。

【问题讨论】:

  • import <module> 与 JavaScript 或 Perl 中的 exec(<moduleSource>) 基本相同。
  • +1 表示语法 %run abc.py -- 试图寻找那个
  • 你可以使用路径:%run ../scripts/my_scripts 例如
  • 对于使用 Click 库开发的 CLI 脚本,它对我不起作用,我得到:IOErrorTraceback(最后一次调用)/home/miguelfg/workspace/projects******** */db_preparation.py in () 1270 1271 if name == "main": -> 1272 main() 1273 1274 ...

标签: python path ipython


【解决方案1】:

不完全是您问题的答案,但您可以在脚本执行结束时使用 ipython 的 -i 参数进入 ipython:

ipython -i my_script.py

在脚本结束时,您将进入 ipython 提示符,脚本的变量可供您使用,就像 python -i

【讨论】:

    【解决方案2】:

    对于 Python 3.6.5

    import os
    os.getcwd()
    runfile('testing.py')
    

    【讨论】:

    • runfile()ipython 的命令吗?对我来说不能开箱即用。
    【解决方案3】:

    如何在 Ipython 中运行脚本

    import os
    filepath='C:\\Users\\User\\FolderWithPythonScript' 
    os.chdir(filepath)
    %run pyFileInThatFilePath.py
    

    应该这样做

    【讨论】:

      【解决方案4】:

      在“my_script.py”目录中,您可以简单地执行以下操作:

      %run ./my_script.py
      

      【讨论】:

      • 简洁明了的最佳答案
      • SyntaxError: invalid syntaxPython 控制台 上。 Debian 9 上的 Python 3.5.3。但是,适用于 IPython。
      • @rotton 那是因为%run 是一个 ipython 魔术命令,而不是 Python 语言本身的一部分。
      【解决方案5】:

      在python中,模块和脚本没有区别;您可以执行脚本和模块。该文件必须在 pythonpath AFAIK 上,因为 python 必须能够找到有问题的文件。如果python是从一个目录执行的,那么该目录会自动添加到pythonpath中。

      有关模块与脚本的更多信息,请参阅What is the best way to call a Python script from another Python script?

      还有一个内置函数 execfile(filename) 可以做你想做的事

      【讨论】:

      • 我也是这么想的。但是,实际上可以导入模块,但解释器找不到脚本,除非从它们所属的目录开始。
      • 阅读docs.python.org/tutorial/modules.html#the-module-search-path了解更多信息。它详细说明了python必须在哪里找到文件,更具体地说,许多模块可以兼作脚本,使用末尾的“if __name__ == '__main__':”行
      【解决方案6】:

      %run 魔术有一个参数file_finder,它用于获取要执行的文件的完整路径(请参阅here);正如您所注意到的,它只是在当前目录中查找,必要时附加“.py”。

      似乎没有办法指定使用哪个文件查找器来自 %run 魔术,但是没有什么可以阻止您定义自己的调用 @987654325 的魔术命令@ 带有适当的文件查找器。

      作为一个非常讨厌的hack,你可以用你自己的覆盖默认的file_finder

      IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder
      

      说实话,按照 IPython API 的变化速度,这很可能会继续发挥作用,就像定义自己的魔法一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2020-02-25
        相关资源
        最近更新 更多