2011-10-30 8 views
11

私はこれのようなpythonアプリケーションを持っています別のレベルのフォルダからクラスをインポートする

/ 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/test_john.py 

私がやろうとしているのはjohn.pyを使う必要があるユニットテストtest_john.pyですが、それは別のフォルダにあります。

tests/test_john.py私の tests/test_john.pyではこれを実行します。

Traceback (most recent call last): 
    File "test_john.py", line 2, in <module> 
    from john import John 
ImportError: No module named john 

どのようにして、クロールフォルダからクラスをインポートできますか?

+0

「crawl.john import John」を試すか、「from .. .. crawl.john import John」を試すことができます(http://stackoverflow.com/questions/1054271/how-to-import-a-python-ディレクトリの上にあるクラス) –

答えて

11

ルートフォルダは、あなたのPYTHONPATHにある場合は、私のtests/test_john.py

/__init__.py 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/__init__.py 
/tests/test_john.py 

はあなたが行うことができます:

次のようにあなたはそれをインポート可能なパッケージを作ります

または

from ..crawl.john import John 
+0

ルートフォルダが私のpythonパスにないと思われます。私はそれがpythonpathにCWDを追加するかもしれないと思ったが、そうしなかった。それを行うための最善の方法? – Wizzard

+0

があります。ウィンドウでは、私のパッケージとライブラリのために、site-packagesにsite.pthファイルを単にフォルダの名前で追加します。 – joaquin

2

お使いのOSがサポートしていれば、testディレクトリに../crawlにシンボリックリンクを配置し、from crawl.john import Johnを使用しています。

関連する問題