2016-05-15 35 views
8

私はPythonの初心者です。Python - モジュールが見つかりません

class SellOrder(object): 
    def __init__(self,genericName,brandName): 
     self.genericName = genericName 
     self.brandName = brandName 

hello-world.pysrcフォルダ内にある次へ:私が開始する前に、ここに私のPythonのフォルダ構造は、私はPythonのファイルを持っているmodelという名前のフォルダが内容が続くorder.pyと呼ばれているsrcの下

-project 
----src 
------model 
--------order.py 
------hello-world.py 

です、1つ上のレベルorder.py

import model.order.SellOrder 

order = SellOrder("Test","Test") 

print order.brandName 

いつでも私は逃したものがあり、それは誤り

Traceback (most recent call last): 
    File "hello-world.py", line 1, in <module> 
    import model.order.SellOrder 
ImportError: No module named model.order.SellOrder 

になりpython hello-world.pyを実行しますか?

+0

__init__.pyの場合の内容は? – user962206

+0

https://docs.python.org/2/tutorial/modules.html#packages –

+0

'__init __。py'は空でも、コードを含むこともできます。プロジェクトがプライマリ/パブリッククラスをパッケージレベルで公開するのは一般的です。あなたのケースでは、 'from project.model.order import SellOrder'の代わりに' model.order import SellOrder'から他のコードが '' project import Sellorder''を実行できるように追加することができます。 – miraculixx

答えて

4

Pythonのすべてのモジュールには、特定のディレクトリ構造が必要です。 You can find details here.

空のファイルを作成しますが、あなたのディレクトリ構造がそのようなものになりますように、modelディレクトリの下__init__.pyと呼ば:

:あなたの hello-world.pyファイルでも

. 
└── project 
    └── src 
     ├── hello-world.py 
     └── model 
      ├── __init__.py 
      └── order.pyc 

を次のimport文を変更それを修正する必要があり

from model.order import SellOrder 

:)

PS :modelディレクトリを別の場所(同じディレクトリブランチにない)に配置する場合は、sys.pathを使用してpythonパスを変更する必要があります。

+3

'src'ディレクトリを持たないことも良い方法です。あなたが他の場所にコードをインポートした場合、 'project.src.model'ではなく' project.model'をインポートすることができるはずだからです。 – miraculixx

+1

@miraculixx絶対に! – RafazZ

0

あなたは、階層内のすべてのフォルダに(それぞれの側に2つのアンダースコア)__init__.pyという名前のファイルが必要なので、src/に1つ、model/で1。これは、Pythonが特定のフォルダにアクセスする必要があるかどうかを調べるためのものです。ファイルには初期化命令が含まれていますが、たとえそれらを空にしても解決します。

関連する問題