2016-12-07 7 views
0

私はLinux環境でpython 2.7を使用していますが、特定の条件下で.pyファイルをインポートする際に問題があります。次のように私のディレクトリツリーは次のとおりです。現在のディレクトリからpythonがインポートされない

/mainFolder 
    executable.py 
    /Folder 
     input_file.py 

executable.pyラインで輸入input_file.py__import__('input_file')

私はフォルダmainFolder/Folderにいると私は../executable.pyを実行すると、私は出力を得る:ImportError: No module named input_file

、いつI input_file.pymainFolderに移動してください。それを見て、私はinput_file.pyがpythonのパスにないという印象を受けています。私はそれを修正する方法を知っています。

これはgithubリポジトリからのコードであり、おそらく著者のコンピュータで動作するコードなので、私は印象に残っていますが、明らかにそうではありません。

変更可能な設定はありますか?sys.path.append(0,'mainFolder/Folder')のような何かを行う必要はありませんか?

+1

なぜ、単純な 'import'キーワードの代わりに、インポート関数' __import __() 'を使用していますか? –

+0

私は '__import __()'を使用しています。実際には 'executable.py'を入力ファイルとして渡しているので、毎回' executable.py'を変更する必要はありません私は新しい入力ファイルを使用します。 –

答えて

0

あなたは簡単にそれを

import Folder.input_file 

または

Folderinput_file.pyが入っているフォルダの名前です
__import__('Folder.input_file') 

を修正することができます。Pythonで

+0

Python 3.5.2と完璧に動作するので、これはPython 2.7の奇抜ですか? –

+1

Woops、そうです! –

+0

'Folder'に' __init __。py'が必要な場合があります。それは空にすることができます。 –

2

"パッケージ" ファイルによって識別されます

このパッケージフォルダのルートで

__init__.py

。この場合

、あなたのツリーは次のように表示されなければならない。この場合

/mainFolder 
    executable.py 
    /Folder 
     **__init__.py** 
     input_file.py 

インポートモジュールをしたい場合は、:input_fileをモジュールとして、あなたは実行可能で宣言することができます。

from Folder import input_file 

か偶数

from Folder.input_file import * 
from Folder import * 

this responseに記載されている代替と次の説明では、 EDディレクトリ構造のための例:

executable.pyファイルの内容:

Folder = __import__('Folder.input_file') 
print(Folder.input_file.summm(1,2)) 

input_file.pyファイルの内容:それは醜いですが、あなたの元の構造次の例を構築することでした

def summm(a, b): 
    return a+b 

。この場合、Folderフォルダ内に__init__.pyファイルを追加する必要はありません。

+0

私もこれについて考えましたが、githubリポジトリに__init__.pyファイルはなく、オペレーティングシステムのディレクトリにあるパッケージをPythonが認識してはいけませんか? –

+0

James、私はあなたが記述した構造のために投稿を編集しました。それはあなたのケースで動作しますか? – apast

関連する問題