3

Windows XPのPythonPathに問題があり、何か間違ったことをしているのではないかと思っています。

ディレクトリを持つプロジェクト(Pydevで作成)があるとしsrcます。下srcに、という名前の単一のパッケージがあり、その中にクラス名commonで名前が付けられた単一のクラスモジュールがありますservice.pyService

srcディレクトリと共通パッケージを持つ別のプロジェクト(これもPydevで作成された)があるとしましょう。共通パッケージには、client.pyサービスをインポートする単一のスクリプトがあります。

つまり、2つの別々のディスクの場所ですが、同じパッケージです。

PYTHONPATH両方のsrcディレクトリを含めるように設定しても、ファイルが両方とも同じディレクトリにない限り、インポートは失敗することに気づきました。恐ろしいモジュールが見つかりません。

Pythonがモジュール名を解決する方法を誤解していますか?私はJavaとそのクラスパス地獄に慣れています。

4

3 に答える 3

2

このような分割パッケージが本当に必要な場合は、モジュール レベルの属性 __path__ を読んでください。

つまり、「src」ディレクトリの 1 つをメイン ディレクトリにして、他の「src」のパスを __path__ リストに追加する __init__.py を指定します。Python は、'src' のサブモジュールを検索するときに、両方の場所を検索するようになりました。

ただし、長期的にはこれをお勧めしません。もろく、物を動かすと壊れます。

于 2010-07-27T18:39:39.070 に答える
1

このようにインポートしようとすると:

import src.common.service

Python は、Python パスで「src」(または卵など) という名前のディレクトリを探します。「src」が見つかると、別のものは考慮されません。最初の「src」に common と service が含まれていない場合、パス内の別の「src」ディレクトリにそれらが含まれていても、ImportError が発生します。

于 2010-07-27T18:22:31.510 に答える
1

Python では、各パッケージに一意の名前を付けることで、この問題を回避するのが最善だと思います。両方のパッケージに名前を付けないでくださいcommon。次に、次のような方法で両方をインポートできます

import common1.service as cs
import common2.client as cc
于 2010-07-27T18:22:31.123 に答える