2016-03-31 16 views
0

この質問はよく聞かれましたが、私はインポートに関する非常に特殊な問題があります。 (temp/に)スクリプトの絶対インポートと相対インポート

main/main.py 
main/test_device.py 
main/lib/instructions.py 
main/device/android.py 
main/temp/example.py 

は基本的に、どのようなここで起こっていることは私のプログラム(main.pyは)いくつかの小さなスクリプトを作成することですし、それらを実行しようと次のように私は、ファイル構造を持っています。ただし、これらのスクリプトはそれぞれlib/instructions.pydevice/android.pyを参照しています。このコードは、これらのファイルを実行します:

name = "temp/test_" + str(program_name) + ".py" 
input_file = open("test_device.py", "r") 
contents = input_file.readlines() 
input_file.close() 
contents.insert(7, "program = [" + ", ".join(str(i) for i in instructions) + "]\r\n") 
contents.insert(8, "count = " + str(program_name) + "\r\n") 
contents = "".join(contents) 
input_file = open(name, "w+") 
input_file.write(contents) 
Popen("python " + name) 

私はすべてのディレクトリに__init__.pyファイルを持っていますが、これらのファイルはスクリプトですので、私は相対的な輸入品を使用することはできません。これらのライブラリをどのようにインポートするのですか?

+0

絶対パスを使用する場合がありますが、私たちにあなたが 'temp'ディレクトリにスクリプトを実行するために使用するコードを表示します。 – Sevanteri

+0

@セヴァンテリ私はコード – Woody1193

答えて

1

あなたのことを理解していれば、あなたのパッケージから他のモジュールをインポートできるようにするためにコンテンツにビルドしているスクリプトが必要ですが、その対象のディレクトリを要求することはできませんそれ自身の上に厄介な相対的な輸入。あなたが一緒に

contents.insert(0, "import sys; sys.path.append('lib'); sys.path.append('device')") 

それが後半にタイプミスがあるかもしれないので、私は自分の携帯電話によここ&上だが、私はそれがあなたのために働くだろう願ってリストに参加する前にこの行を追加してみてください。

編集:現在の作業ディレクトリである応じてその上、あなたは「../lib」を追加する必要がありますか

+0

私は特に 'sys'をこのように使うのは好きではありませんが、助けられないと思います。ソリューションに感謝します。 – Woody1193

+0

ようこそ。ええ、私はシステム全体の設定を変更するように思えるように思えますが、本当に変更はあなたが行っている名前空間に影響します。永続的ではありません –

1

あなたのモジュールをpython/lib/site-packagesにコピーすると、問題が解決します。

+0

をアップロードしました。それは最終目標ですが、私たちはまだそれほど準備が整っていません。 – Woody1193

関連する問題