2016-09-02 15 views
2

私はpython3、venv、c9.io PAASを使用してWebアプリケーションを作成しています。それに回し、仮想環境でファイルをインポートする

batch_runner.py 
logic/ 
    __init__.py 
    parsers/ 
     __init__.py 
     time_parser.py 
     abstract_parser.py 

ここbatch_runner輸入abstract_parser、time_parserからのインポート:私は私のコードの次のような構造を持っています。すべてがインストールされ、venvが起動して実行されます。

。具体的には、batch_runner.pyは含まれています

from logic.parsers import abstract 
from sys import argv 

url = argv[1] 
a = abstract(url) 

logic/__init__.pyは空です。 logic/parsers/__init__.pyが含まれています:私はlogicに行き、直接python abstract_parser.pyを実行した場合、予想通り

from abstract_parser import abstract 
from time_parser import _timeInfo 

、すべてが動作します。しかし、私は1つのレベルアップを行く、とpython batch_runner.pyを実行した場合、abstract_parserをインポートすることができますが、それはこのImportError: No module named 'abstract'

+1

どのファイルをインポートし、使用している正確なインポートステートメントを追加してください。あなたは 'from logic import abstract_parser'を使っていますか?どのように 'time_parser'をインポートしようとしていますか? '__init __。py'ファイルには何が入っていますか? – Praveen

+0

ありがとうございます。 –

答えて

2

モジュールのpython documentationからのインポートについては、読んでください。この場合

は、一つの可能​​な解決策は、あなたのパッケージ内の相対インポートを使用することです:

from .abstract_parser import abstract 
from .time_parser import _timeInfo 

abstract_parser.pyで:

from .time_parser import _timeInfo 

、使用、あるlogic/parsers/__init__.py

これにより、parsers/__init__.pyモジュールはabstract_parserモジュールとtime_parserモジュールが見つかります。

pythonのインポートシステムには、驚くほど多くのトラップがあります。 Nick CoghlanのThis blog postはそれらの多くを記述しています。パッケージを開発する予定の場合は、私は個人的に読んでみる必要があります。

2

変更を投げ、abstract_parserから呼び出されtime_parserを見つけることができません。

from abstract_parser import abstract 

from logic.parsers.abstract_parser import abstract 
+0

このソリューションを使用している場合は、 'parser/__ init __。py'を空のままにして、' from logic.parsers import abstract_parser as ap'と 'ap.abstract(...)あなたが呼んだときなどに。これは、abstract_parserの下に、インポートが必要な名前がたくさんある場合に特に便利です。 – Praveen

+0

ありがとうございます。 – Windsooon

関連する問題