3

「custom_module」という名前のフォルダーを作成しました。フォルダー内に __init__.py があり、次のものが含まれています。

__all__ = [
        'Submodule1',
        'Submodule2'
]

私が読んだドキュメントimport custom_moduleから、パッケージを呼び出してアクセスできるはずですが、これは起こっていません。Python にパッケージを認識させるにはどうすればよいですか? 私はpython 3.2を使用しています

更新: パッケージは python フォルダーにありません。Python環境はどのようにそれを見つけるので、名前で正常にインポートできますか.

4

2 に答える 2

8

あなたが混乱している 2 つの異なる概念があります: packagesmodulesです。

モジュールは、クラス、変数などを含む Python スクリプトです。ファイル名でインポートすると、名前空間の変数にアクセスできます。

パッケージは、フォルダー内でグループ化されたモジュールのコレクションです。フォルダーに というファイルが含まれている場合__init__.py、Python ではフォルダー全体をモジュールのようにインポートできます。これにより でコードが実行されますが__init__、必ずしもフォルダー内のすべてのモジュールがインポートされるわけではありません。(これは意図的な設計上の選択です。多くの場合、パッケージは非常に大きく、すべてのモジュールをインポートするには非常に長い時間がかかる可能性があります。)

package.thingデフォルトで(として) エクスポートされるのは、内部で定義された変数だけです__init__submoduleとして利用できるようにしたい場合はpackage.submodule、 内にインポートする必要があります__init__

__all__関連概念です。簡単に言えば、それはあなたがするときに何をインポートするかを定義しますfrom package import *。なぜなら、そうでなければそれがどうあるべきかを Python が理解するのは容易ではないからです。一般的には必要ありません。

于 2012-09-18T11:06:36.537 に答える
7

sys.pathPython 検索パスを保持します。モジュールとパッケージを試す前importに、パスを含めるように設定してください。

import sys
sys.path.insert(0, 'your_path_here')
import custom_module

詳細については、Python ドキュメントとこの質問を参照してください。

于 2012-09-18T11:44:28.787 に答える