2012-02-21 35 views
69

モジュールのインポートがPythonでどのように機能するかを理解するのは難しいです(前に他の言語で行ったことはありません)。自分のモジュールをPythonでインポートできません

のは、私が持っているとしましょう:

myapp/__init__.py 
myapp/myapp/myapp.py 
myapp/myapp/SomeObject.py 
myapp/tests/TestCase.py 

は今、私はこのような何かを取得しようとしている:Pythonはそれを見ることができないよう

myapp.py 
=================== 
from myapp import SomeObject 
# stuff ... 

TestCase.py 
=================== 
from myapp import SomeObject 
# some tests on SomeObject 

しかし、私は間違いなく、何か間違ったことをやっていますmyappはモジュールです:

ImportError: No module named myapp 

答えて

53

あなたはmyapp.pyからSomeObjectをインポートしようとしているように見えるあなたの特定のケースではとTestCase.pyスクリプト。 myapp.pyから、同じフォルダ内にあるので、

import SomeObject 

を実行してください。 TestCase.pyについて、

from ..myapp import SomeObject 

しかしを行い、これを使用すると、パッケージからテストケースをインポートしている場合にのみ動作します。 python TestCase.pyを直接実行したい場合は、パスを混乱させる必要があります。これはPython内で行うことができます:

import sys 
sys.path.append("..") 
from myapp import SomeObject 

これは一般的に推奨されていませんが、

一般に、他の人にPythonパッケージを使用させたい場合は、distutilsを使用してセットアップスクリプトを作成する必要があります。そうすれば、だれでもあなたのパッケージをpython setup.py installのようなコマンドを使って簡単にインストールでき、マシン上のどこでも利用できるようになります。あなたがパッケージについて真剣なら、Python Package Index、PyPIに追加することもできます。

+0

' TestCase.py'に 'import'を使ってみましたが、同じエラー。私はそれが '__init __。py'のサブディレクトリにあると仮定していますか? – n0pe

+0

ああ、私はそれを得ると思います。私のテストケースがパッケージから呼び出されているなら、私は 'from ... import ...'の権利を使うことができますか? – n0pe

+1

TestCaseをパッケージの外部からインポートする場合のみです。たとえば、myapp以外のスクリプトから 'myapp.tests import TestCaseから'を実行するとします。テストフォルダ内で 'python TestCase.py'を実行している場合、Windowsで作業している場合には –

20

機能importはFILを探しますあなたのPYTHONPATHにenを入れてください。変数とローカルディレクトリ。だから、同じディレクトリ内のすべてのファイルを置く、または端末に入力してパスをエクスポートするか::

export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/" 
+0

それを使用する他のすべての人にとって、どうすればそれが動作することを確認できますか?むしろ、実行する前に特定の環境変数を設定するように指示する必要はありません。 – n0pe

+0

現在のディレクトリはpythonpathにあります。したがって、スクリプトは同じフォルダ/ディレクトリにある限り動作します。残念ながら、これらのスクリプトはそれぞれ別々のディレクトリにあります。 – JKirchartz

+2

Windowsの場合、 'export'の代わりに" PYTHONPATH =%PYTHONPATH%; C:\ path_to_myapp \ myapp \ myapp "を設定します。 –

8

エクスポートパスは良い方法です。別の方法は、site-packagesの場所に.pthを追加することです。どこでもMy Macの私のpythonで は私が/Library/Python/2.7/site-packages/awesome.pthでとでawesome.pthというファイルを作成し

/Library/Python/2.7/site-packages 

の下に表示/ライブラリ/ Pythonでのsite-packagesを保ちますプロジェクト名は、それがプロジェクトdを検索しますmyapp.pyと同じであるため、ファイルはあなたが

from myapp.myapp import SomeObject 

を試すことができます

/opt/awesome/custom_python_modules 
+1

をインポートすることはできません。どうすればいいですか。 –

+0

私はよく分かりません。ウィンドウを使用している場合。いくつかのVMソフトウェアを見つけて、linuxを使ってください。または、ウィンドウ内の変数のエクスポートに関するこの回答を参照してください。 http://stackoverflow.com/questions/559816/how-to-export-and-import-environment-variables-in-windows – jmontross

+0

これは私が必要としていたものです。 – Lee88

2

私の素晴らしいモジュールを参照する次のパスを入れて最初に

0

あなたの最初のmyappディレクトリに、setup.pyファイルを追加して、セットアップに2つのpythonコードを追加することができます。py

コマンドラインの最初のmyappディレクトリに、pip install -eを使用します。パッケージをインストールする

関連する問題