Python-コマンドラインモジュールの実行中にPYTHONPATHを追加します


86

実行したい:

python somescript.py somecommand

しかし、これを実行するときPYTHONPATHは、特定のディレクトリを含める必要があります。追加したいディレクトリは、実行しているプロジェクトに基づいて変更されるため、環境変数に追加することはできません。PYTHONPATHスクリプトの実行中に変更する方法はありますか?注:PYTHONPATH変数すら持っていないので、このスクリプトの実行中に変数を追加したりオーバーライドしたりすることを心配する必要はありません。

回答:


148

Mac / Linuxの場合;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

Windowsの場合、ラッパーを設定しますpythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

次のpythonpath.batようなスクリプトファイルを呼び出します。

pythonpath.bat /foo/bar/baz somescript.py somecommand

@İsmail-ありがとう。ただし、コマンドプロンプトからスクリプトを実行しているときにそれを行うにはどうすればよいですか?私はPythonを実行しておらず、ものをインポートして手動で実行しています。
orokusaki 2011年

Mac / Linuxでは、次のようにしますPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

私が試したpython -c"import sys;sys.path.append('/my/dir')"し、その後python myscript.py mycommand、それは明らかに次の最初のインタプリタセッションからのパスを共有しません。ああ、あなたの次のコメントを見ただけで、今試してみてください... WinXPでは動作しませんでした。
orokusaki 2011年

1
unsetWindowsには環境変数コマンドはありません。代わりsetlocalに、イニシャルの後にaを追加するecho offendlocal、.batスクリプトが終了すると暗黙的に発生します(PYTHONPATH以前の値に復元されます)。
martineau 2011年

5
Windowsでは、既存のパスを追加するPYTHONPATH場合は、を使用することをお勧めしますset PYTHONPATH=%PYTHONPATH%;%1
martineau 2011年

49
 import sys
 sys.path.append('your certain directory')

基本的に、sys.pathは、Pythonモジュールのすべての検索パスを含むリストです。インタプリタによって初期化されます。PYTHONPATHの内容は、そのリストの最後に自動的に追加されます。


10
またはsys.path.insert(0、 '/ some / directory')を使用して、パスの先頭に配置します。これにより、マテリアルがすでにpythonpathにある可能性のある他のものをオーバーライドできます。
sienkiew 2011

私はこの回答を使用して、pydev-eclipseIDEの外部でuninttestを実行しました。
LAL 2017年

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')Windowsでの例。
ボブ・スタイン

9

のようにPOSIX準拠のシェルからコマンドを実行している場合は、次のようbashに環境変数を設定できます。

PYTHONPATH="/path/to" python somescript.py somecommand

すべてが1行にある場合、PYTHONPATH環境値はその1つのコマンドにのみ適用されます。

$ echo $PYTHONPATH

$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH

まさに私が探していたもの、どうもありがとう。何らかの理由で実行python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"が機能しませんでした。
ルークデイビス

0

スクリプト内で関数を実行するためにこれを試すことができます

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"

-1

これはWindows用です:

たとえば、デスクトップに「mygrapher」という名前のフォルダがあります。中には、メインファイル「grapherMain.py」が必要とするPythonファイルを含む「calculation」と「graphing」というフォルダがあります。また、「grapherMain.py」は「graphing」に格納されます。ファイルを移動せずにすべてを実行するために、バッチスクリプトを作成できます。このバッチファイルを「rungraph.bat」と呼びましょう。

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

このスクリプトは「mygrapher」にあります。実行するには、コマンドプロンプトを表示してから、次の操作を行います。

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)

5
これは@İsmail'cartman'Dönmezの回答とどう違うのですか?
Alex Okrushko 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.