私はパッケージとモジュール名のシャドウイングのルールをPythonで理解しようとしています。 python:x import yから以前のインポート結果を変更します
├── mypackage
│ ├── argparse.py
│ └── __init__.py
└── script.py
mypackage
from future import absolute_imports
付き)のpython 2とPython 3
ために起こりますモジュール。
import argparse
print(argparse)
from mypackage.argparse import foo
print(argparse)
結果は、私が期待するものです::
<module 'argparse' from '/usr/lib/python3.5/argparse.py'>
<module 'argparse' from '/usr/lib/python3.5/argparse.py'>
しかし、私は私のパッケージから機能を実行し、同じインポートを実行するために私のスクリプトを変更した場合、私のスクリプト内で、私は次のコードを実行しますそして、私のパッケージの__init__.py
でprint文、すなわち:
スクリプト:
from mypackage import main
main()
__init__.py
:結果
import argparse
print(argparse)
from mypackage.argparse import foo
print(argparse)
def main():
pass
は、私が参照してください。
<module 'argparse' from '/usr/lib/python3.5/argparse.py'>
<module 'mypackage.argparse' from '/tmp/test/src/mypackage/argparse.py'>
なぜ、このケースではありません(とされていない他のいずれかで)from X import Y
ステートメントは、ローカルにの前の世界的な輸入を上書きモジュール?
これはどこかで文書化されていますか?私はこれが絶対的な輸入で得られた利益の50%を役に立たないと感じている。 – languitar
[パッケージに関するドキュメント](https://docs.python.org/3/tutorial/modules.html#packages)には、多くの点で「__init __。py」woksの仕組みが説明されていません。 :/ –
ありがとう、ありがとう。だから私は、argparseがXからの後に輸入されることを保証するために、私の輸入品を珍しい方法で整理することを別にして、これに対処する機会はない。 – languitar