2012-11-28 10 views
13

このために私はmain.pyで次のコマンドを使用:インポートモジュール

a = 'C:/python/files/folder1' 
    sys.path.insert(0, a) 
    from files.folder1 import * 

はしかし、私は(同様にフォルダ2用)のfolder1からモジュールをインポートすることができません。 は、私はエラーを取得する:

No module named files.folder1 

多くのpythonファイルがfolder1の、フォルダ2にあるように私はそうで... importコマンドを使用することはできません。

ここに何か不足していますか?

答えて

18

私は、Python 2.7でこれを行うと、私が使用します。

import sys 
sys.path.append('C:/python/files/folder1') 

import a 
import a1 

UPDATE

は、ここで私は辞書にディレクトリ内のすべてのモジュールをインポートするために構築されたハックです:

import os 
import sys 

dir_of_interest = 'C:/python/files/folder1' 
modules = {} 

sys.path.append(dir_of_interest) 
for module in os.listdir(dir_of_interest): 
    if '.py' in module and '.pyc' not in module: 
     current = module.replace('.py', '') 
     modules[current] = __import__(current) 

私はちょうどそれを構築し、それは非常にハッキーですが、それはあなたが欲しいもののようなものかもしれません。だから、代わりにあなたがモジュールとしてfolder1をインポートすることができますという意味ではありませんパスにfolder1を追加する場合は、modules["module_name"].thing

+0

多数のファイルがある場合、多くのインポートステートメントを書くのは面倒ですか? – user741592

+0

@ user741592:なぜあなたは多くのファイルの間であなたのコードを分割していますか?関連するものをまとめてモジュールにする必要があります。 – BrenBarn

+0

残念ながら、コードを分割する必要があります。チャンクを1つのファイルにまとめるのは嬉しかったです。 – user741592

1

を言うmodule_name.thingを言って、あなたが望むモジュールにアクセスします。これは、folder1内のファイルをインポートできることを意味します。だから、あなたができる:

import a 
import a1 

をあなたはfolder1aa1がモジュールであるのパッケージも持っているしたい場合は、folder1__init__.pyを配置し、import folder1を行う必要があります。さらにfrom folder1 import *をインポートしてそのインポートをaa1にするには、__init__.pyaa1をインポートするコードを入れる必要があります。

構造化された方法でインポートできるフォルダにたくさんのファイルがある場合、そのフォルダをパッケージにする必要があります。

2

I cannot use import command as there are many python files in folder1,folder2...so on. Am I missing something here?

私は、あなたが不足している部分は、各フォルダ内__init__.pyファイルであると考えています。このファイルには、from somepackage.subpackage import *によってインポートされるすべてのサブモジュールをリストする__all__変数が含まれている必要があります。

これはすべてPython Tutorial section on Packagesでエレガントに説明されています。これは:-)

26

クイック回答に役立ちます

希望:

フォルダファイルのfolder1フォルダ2に(空白にすることができます)ファイル__init__.pyを追加します。次に、ファイルサブパッケージフォルダ1フォルダ2のファイルがあります。この後、あなたはmain.pyから次のようにインポートできます:

from files.folder1 import * 
+2

素直な答え! –

+0

私のフォルダ構造がdataaccess.service/services.pyのようなものなら、このパスをどうやってインポートするのですか? – tiru

関連する問題