2

cron.hourly が不足している foo があります。chmod +x を実行したところ、問題なく動作しました。私の問題は、Python モジュールをインポート可能として認識しないことです。

~/Foo/src があり、その中には、実行可能ファイル (main) に変換した元の Python コードと、インポートしようとしている他のモジュール (foobar) があります。そこにinit .py があり、空の状態で、どちらのモジュールもインポートできるはずです。実際、私のスクリプトを

python src/main.py

すべてが正常に機能し、このエラーは発生しません。実行時

run-parts -v /etc/cron.hourly/main

次のようなエラーが表示されます。

ImportError: No module named foobar
run-parts: /etc/cron.hourly//main exited with return code 1

foob​​ar をインポートする方法は

os.chdir("/home/ubuntu/Foo/src/")
import foobar

繰り返しますが、これは Python から実行している場合は機能しますが、実行可能ファイルを実行している場合は機能しません。これはなぜですか? また、これを回避するには何を変更すればよいですか?

4

1 に答える 1

0
import sys
sys.path.append("/home/ubuntu/Foo/src")

import foobar

ドキュメントから:

sys.path

モジュールの検索パスを指定する文字列のリスト。環境変数 PYTHONPATH と、インストールに依存するデフォルトから初期化されます。

プログラムの起動時に初期化されるため、このリストの最初の項目である path[0] は、Python インタープリターを呼び出すために使用されたスクリプトを含むディレクトリです。スクリプト ディレクトリが利用できない場合 (たとえば、インタプリタが対話的に呼び出された場合、またはスクリプトが標準入力から読み取られた場合)、path[0] は空の文字列であり、Python に最初に現在のディレクトリ内のモジュールを検索するように指示します。PYTHONPATH の結果として挿入されるエントリの前にスクリプト ディレクトリが挿入されることに注意してください。

プログラムは、独自の目的のためにこのリストを自由に変更できます。

于 2013-03-06T23:14:25.303 に答える