とは何ですか。Pythonでのインポートステートメントの意味?


140

Pythonのmultiprocessingモジュールのコードを調べていますが、次の行が含まれています。

from ._multiprocessing import win32, Connection, PipeConnection

の代わりに

from _multiprocessing import win32, Connection, PipeConnection

前の期間である微妙な違い_multiprocessing。どういう意味ですか?なぜ期間?


3
これは相対インポートと呼ばれます:docs.python.org/tutorial/modules.html
Aillyn

がなければ、メインスクリプトの隣になんらかの理由で.ファイルがあった場合、問題が発生_multiprocessing.pyしますmultiprocessing。を使用すると.、独自のモジュールを取得できます。
Chris Morgan

.がピアモジュールを参照している場合、.そのマルチプロセッシングモジュールを通常のsys.pathライブラリの一部にする必要があるときに、ドキュメントでを使用するように言われているのはなぜですか?質問とクリスの説明はそれらを混同していますか、それとも私は理解していませんか?ヘルプに感謝します。
rfii

回答:


120

これは、明示的な相対インポートの新しい構文です。現在のパッケージからインポートすることを意味します。


26
「現在のパッケージ」とは何を定義していますか?
フラクチャ

7
インポートするパッケージがどこにあるかを示す必要があります。これは基本的に、現在のネームスペースまたはパッケージディレクトリを意味します。
キース

2
ありがとう、私はあなたが何を言っているのか知っていると思います。明確にするために、例を挙げていただけませんか?
フラクチャー12/12 / 15、12

10
:あなたは、のようなものを行うことができますfrom . import peermodule from .. import parentpackagemodule
キース・

1
@bmc学ぶための良い方法は、小さな実験をセットアップして自分で試すことです。;-)
キース

22

モジュール名のドットは、相対モジュールのインポートに使用されます(ここここ、セクション6.4.2を参照)。

現在のパッケージではなく、その親を参照して、複数のドットを使用できます。これはパッケージ内でのみ使用し、メインモジュールでは常に絶対モジュール名を使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.