web-dev-qa-db-ja.com

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

実行したい:

python somescript.py somecommand

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

79
orokusaki

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
132
ismail
 import sys
 sys.path.append('your certain directory')

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

44
Piotr Czapla

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

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
7
Ned Deily

この投稿は本当に古いものであり、時間の経過とともに何が変わったかわからないので、提案されていないように見えるものを追加したいと思います。

まず、pythonフラグなしでスクリプトを実行可能にするには、スクリプトの先頭にShebang行を追加する必要があります。

#!/usr/bin/python

# rest of your code...

上記の簡単な行で、あなたがしていることは、使用したいpythonインタープリターのパスを指定することです。 Pythonの複数のバージョンがインストールされている場合、これは非常に便利です。

これで、スクリプトを次のように実行できます。

<~/direcotry_of_script.py>$ ./script.py [options]

./でスクリプトを実行する場合、実行権限がないとエラーが発生する可能性があります。そのためには、Sudo chmod 744 <scriptname>を使用して、ルート名前空間に実行権限を付与できます。

実際の提案のために! (Linuxの場合)

スクリプトを/usr/local/binディレクトリに追加するだけです。その後、そのスクリプトはファイルシステムのどこからでも実行できます。下記参照:

$ script.py [options]

ヒント:script.pyは単に名前をscriptに変更し、次のように使用できます:

$ script [options]
1
P. Soutzikevich

これを試して、スクリプト内で関数を実行できます

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