web-dev-qa-db-ja.com

echo $ PATHはpythonスクリプトへのパスを示しますが、実行できません

私はシェルの使用に不慣れで、$HOMEにディレクトリを作成したいと思っていました。ここに、すべてのpythonスクリプトを配置し、そのディレクトリへのパスを設定して、移動できるようにします。私のMacの任意のフォルダに移動し、特定のファイルでこれらのスクリプトを実行します。スクリプトは、それらのスクリプトへの入力として機能するファイルと同じディレクトリ内に含まれている必要はありません。

私は読んでこれを.zshrcファイルに追加しました:

export PATH="$HOME/python_functions/bin:$PATH"

次に、sleep_plotter.pyというスクリプトをpython_functions/binに追加しました。この場所に、今後のすべてのスクリプトも配置する予定です。

ただし、そのスクリプトへの入力として使用するテキストファイルを含むフォルダーに移動し、python sleep_plotter.py 113testCtM113.txtと入力すると、最後の引数はスクリプトへのテキストファイル入力であり、次のエラーメッセージが表示されます。

python: can't open file 'sleep_plotter.py': [Errno 2] No such file or directory

しかし、echo $PATHを使用してパスを呼び出すと、次のようになります。

/Users/myname/python_functions/bin: 

これから、pythonがPythonコマンドを実行すると、そのディレクトリを探しているので、sleep_plotter.pyを実行できるはずです。このファイルを含まない別のフォルダにいるとき。

Mac OSX 10.11.2、zsh、およびAnaconda2.3.0を使用しています。

4
pat_krat

PATH変数は、コマンドの実行時に検索されるディレクトリを定義します。ただし、python sleep_plotter.py 113testCtM113.txtを実行すると、sleep_plotter.pypythonプログラム(コマンド)の引数になります。シェルはPATHを使用してpythonを検索しますが、引数は検索しません。

スクリプトに実行可能属性を追加できます。

$ chmod +x /Users/myname/python_functions/bin/sleep_plotter.py

Shebang シーケンスをPythonスクリプトの先頭(最初の行)に追加します。

#!/usr/bin/env python

そして、スクリプトをコマンドとして直接実行します。

$ sleep_plotter.py 113testCtM113.txt
5
techraf

pythonを拡張して追加のディレクトリを検索する場合は、2つのことを行う必要があります。PYTHONPATH変数を設定し、Pythonで-mオプションを使用します。

~/.zshrc内($PATHがないことに注意してください):

export PYTHONPATH="$HOME/python_functions/bin"

そしてターミナルでの使用:

python -m sleep_plotter 113testCtM113.txt

pythonファイルの.py拡張子を省略しなければならないため、以前と同じように入力します。

1
Anthon