在ipython中运行python脚本


122

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

%run my_script.py

而不在包含文件的目录中。


import <module>exec(<moduleSource>)JavaScript或Perl 基本相同。
沃里科

14
语法%run +1。abc.py的+1 –试图寻找它
Sid Kshatriya,

1
您可以使用以下路径:例如%run ../scripts/my_scripts
Jose

对于使用Click库开发的CLI脚本,它对我不起作用,我得到:IOErrorTraceback(最近一次调用在后)/home/miguelfg/workspace/projects*********/db_preparation.py在<module中>()1270 1271,如果名称 ==“ main ”:-> 1272 main()1273 1274 ...
miguelfg

Answers:


126

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

%run ./my_script.py

简洁明了的最佳答案
Evhz

SyntaxError: invalid syntax此处,在Python控制台上。Debian 9上的Python 3.5.3。但是,在IPython上有效。
rotton

1
@rotton是因为它%run是一个ipython magic命令,而不是Python语言本身的一部分。
HugoMailhot

28

如何在Ipython中运行脚本

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

那应该做


16

%run魔术有一个参数file_finder,它使用来获取完整路径文件来执行(见这里); 如您所述,它只是在当前目录中查找,如有必要,附加“ .py”。

似乎没有要到指定的文件取景器使用方式,从%run魔术,但没有什么可以从定义自己的魔法命令阻止你在调用%run用适当的文件查找。

作为一个非常讨厌的黑客,您可以file_finder使用自己的默认设置覆盖默认设置:

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

坦白地说,按照IPython API的变化速度,它与定义您自己的魔术一样可能继续起作用。


16

在python中,模块和脚本之间没有区别;您可以同时执行脚本和模块。该文件必须位于pythonpath AFAIK上,因为python必须能够找到有问题的文件。如果从目录执行python,则该目录会自动添加到pythonpath中。

请参阅什么是从另一个Python脚本调用Python脚本的最佳方法?有关模块和脚本的更多信息

还有一个内置函数execfile(filename)将执行您想要的操作


1
那也是我的想法。但是,实际上可以导入模块,但是除非从脚本所属的目录开始,否则解释器无法找到脚本。
泰勒·德登

1
阅读docs.python.org/tutorial/modules.html#the-module-search-path了解更多信息。它详细说明了python查找文件的位置,更具体地说,许多模块可以使用结尾处的“ if __name__==' __main__':”行兼作脚本
Snakes and Coffee

0

适用于Python 3.6.5

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

1
runfile()命令ipython吗?开箱即用,不适合我。
user3342981
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.