16

次のファイルの配置があります。

python
|---- main.py
|---- files
      |---- folder1
            |---- a.py, a1.py, ...
      |---- folder2
            |---- b.py, b1.py, ...

a.pyモジュールをb.pyにインポートしたかったのmain.pyです。このために、次のコマンドを で使用しましたmain.py

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

ただし、フォルダー 1 からモジュールをインポートできません (フォルダー 2 と同様)。

エラーが発生します:

files.folder1 という名前のモジュールはありません

folder1、folder2、...に多くのPythonファイルがあるため、インポートコマンドを使用できません...

ここで何が欠けていますか?

4

5 に答える 5

33

__init__.pyフォルダーfilesfolder1、およびfolder2にファイル (空白でもかまいません) を追加します。次に、サブパッケージfolder1およびfolder2を含むパッケージファイルを取得します。この後、次のように main.py からインポートできます。

from files.folder1 import *
于 2012-11-28T06:29:17.453 に答える
19

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

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

import a
import a1

ディレクトリ内のすべてのモジュールを辞書にインポートするために作成したハックを次に示します。

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)

私はそれを構築したばかりで、非常にハックですが、あなたが望むものにもっと似ているかもしれません. したがって、必要なモジュールにアクセスするには、言う代わりmodule_name.thingmodules["module_name"].thing

于 2012-11-28T06:20:13.917 に答える
2

パスに追加しても、モジュールとしてfolder1インポートできるわけではありません。folder1これは、folder1 内のファイルをインポートできることを意味します。したがって、次のことができます。

import a
import a1

とをモジュールfolder1のパッケージにしたい場合は、 を入れてから を実行する必要があります。さらにそのインポートとを実行できるようにしたい場合は、そのインポートとにコードを入れる必要があります。aa1__init__.pyfolder1import folder1from folder1 import *aa1__init__.pyaa1

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

于 2012-11-28T06:22:13.747 に答える