11

PyDev で作成された次の python プロジェクトがあるとします。

├── algorithms
│   ├── __init__.py
│   └── neighborhood
│       ├── __init__.py
│       ├── neighbor
│       │   ├── connector.py
│       │   ├── __init__.py
│       │   ├── manager.py
│       │   └── references.py
│       ├── neighborhood.py
│       ├── tests
│       │   ├── fixtures
│       │   │   └── neighborhood
│       │   ├── __init__.py
│       └── web
│           ├── __init__.py
│           └── service.py
├── configuration
│   ├── Config.py
│   └── __init__.py
├── __init__.py
└── webtrack
    |- teste.py
    ├── .gitignore
    ├── __init__.py
    ├── manager
        ├── Data.py
        ├── ImportFile.py
        └── __init__.py

次のように、あるフォルダーから別のフォルダーにモジュールをインポートしようとしても成功しませんでした。

from algorithms.neighborhood.neighbor.connector import NeighborhoodConnector

結果は次のとおりです。

Traceback (most recent call last):
File "teste.py", line 49, in <module>
from algorithms.neighborhood.neighbor.connector import NeighborhoodConnector
ImportError: No module named algorithms.neighborhood.neighbor.connector

そのパスを sys.path 変数に追加しようとしましたが、成功しませんでした。

また、os.walk を使用してすべてのパスを PATH 変数に挿入しようとしましたが、PATH にモジュールを見つけるためのパスが含まれていることを確認したにもかかわらず、同じエラーが発生します。

Linux Ubuntu 13.10 で Python 2.7 を使用しています。

何か間違っている可能性はありますか?

前もって感謝します、

4

4 に答える 4

0

Python 2 と 3 では、インポートの動作が少し異なります。最初の Python 3 と正気の方法 (期待しているように見えます)。Python 3 では、すべてのインポートは のフォルダーに対して相対的ですsys.path(モジュールの検索パスの詳細については、こちらを参照してください)。ところで、 Python は を使用しません$PATH

そのため、あまり心配することなく、どこからでも何でもインポートできます。

Python 2 では、インポートは相対的であり、時には絶対的です。パッケージに関するドキュメントには、レイアウトの例と役に立つかもしれないいくつかのインポート ステートメントが含まれています。

「パッケージ内参照」セクションには、パッケージ間でのインポート方法に関する情報が含まれています。

sys.path以上のことから、あなたは間違っていると思います。含む フォルダーalgorithms(つまり、それ自体ではなく algorithms親) が必要であることを確認してくださいsys.path

于 2013-11-14T08:44:55.243 に答える
0

すべての.py ファイルに設定__package__ = Noneするだけです。すべてのパッケージ階層が自動的にセットアップされます。

その後、インポートに絶対モジュール名を自由に使用できます。

from algorithms.neighborhood.neighbor.connector import NeighborhoodConnector
于 2014-10-26T12:56:35.460 に答える