2

私のプロジェクトでは、メインのパッケージ名を変更したいと考えています。

私は次のようなディレクトリ構造を持っています:

hallo/sub
hallo/foo
hallo/bar

そして、たとえばメインネームを「さようなら」に変更したい:

goodbye/sub
goodbye/foo
goodbye/bar

しかし結果として、新しい名前は常に拒否されます! たとえば、インポートした場合

import goodbye.sub.utils as utils

エラーを返します

ImportError: No module named sub.utils

そして明らかに古い名前は機能しません。ファイル__init__.pyはすべてのサブディレクトリに書き込まれます!

すべての *.pyc ファイルとキャッシュ ディレクトリを削除しようとしましたが、プロジェクトを別のディレクトリに再クローンしようとしましたが、何もありません。新しい名前は常に拒否されます。

*nix で python2 を使用していますが、windows に移動したことはありません。

アイデア?

編集:古い名前は完全に機能します:

import hallo.sub.utils as utils

常にエラーなしで機能してきましたが、問題は名前の変更です。

4

1 に答える 1

0

外部からのインポートについては、__init__.py物事を台無しにする可能性のある変数の内容を確認してください - のように__all__

また、典型的なイディオムは次のとおりです。

from hallo.sub import utils      #tyically this
import hallo.sub.utils as utils  #instead of this

なぜそれが違いを生むのか想像できませんが、python にはばかげたバグがときどきあります。

パッケージ内からのインポートの場合は、代わりに相対インポートを使用できます。パッケージ内でhalloこれを変更できます:

import hallo.sub as sub
import hallo.sub.utils as utils

これに

from . import sub
from .sub import utils

その場合、外側のパッケージが何と呼ばれるかは問題ではありません。

于 2012-10-17T09:30:27.100 に答える