ipython内でPythonスクリプトを実行する


122

パスを指定せずにipython内からpythonスクリプト(モジュールではない)を実行することは可能ですか?PYTHONPATHを設定しようとしましたが、モジュールに対してのみ機能するようです。実行したい

%run my_script.py

ファイルを含むディレクトリにはありません。


import <module>exec(<moduleSource>)JavaScriptまたはPerl と基本的に同じです。
Vortico

14
構文%run abc.pyの+1-それを探していました
Sid Kshatriya

1
次のパスを使用できます:%run ../scripts/my_scripts例
Jose

Clickライブラリを使用して開発されたCLIスクリプトの場合、機能しません。IOErrorTraceback(最後の最新の呼び出し)/home/miguelfg/workspace/projects*********/db_preparation.py in <module >()1270 1271 if name == " main ":-> 1272 main()1273 1274 ...
miguelfg

回答:


126

「my_script.py」のディレクトリ内から、次のように簡単に実行できます。

%run ./my_script.py

簡潔さと簡潔さのための最良の答え
Evhz

SyntaxError: invalid syntaxここでは、Pythonコンソールで。Debian 9上のPython 3.5.3。ただし、IPythonでは動作します。
ロットン

1
@rotton %runは、ipythonのマジックコマンドであり、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では、モジュールとスクリプトの間に違いはありません。スクリプトとモジュールの両方を実行できます。pythonは問題のファイルを見つけることができる必要があるため、ファイルはpythonpath AFAIK上にある必要があります。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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.