私はPython 3.5.1を使用しています。私はここで、文書やパッケージセクションをお読みください。/home/wujek/Playground
におけるながら、今Python 3のパッケージでは__init__.pyは不要ですか?
class Foo:
def __init__(self):
print('initializing Foo')
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
/home/wujek/Playground/a/b/module.py
module.py
:https://docs.python.org/3/tutorial/modules.html#packages
は今、私は次のような構造を持っています
同様に、家の中で012のスーパーフォルダ:実際
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
、私はもののすべての種類を行うことができます。
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
なぜこの仕事をしますか?私はとb
の両方で__init__.py
のファイル(空のファイルが動作する)が必要でしたが、module.py
は、PythonのパスがPlayground
フォルダを指しているときにインポートできますか?
これは、Python 2.7から変更されているようだ:~/Playground/a
と~/Playground/a/b
両方で__init__.py
で
~ $ PYTHONPATH=Playground python
>>> import a
ImportError: No module named a
>>> import a.b
ImportError: No module named a.b
>>> import a.b.module
ImportError: No module named a.b.module
それが正常に動作します。
私は、ドキュメントを読みますが、それは少し長いです。迅速に要約することは可能ですか?あなたはちょうど私に言うことができます:それはまだ__init__.pyをサポートしていますか、またはそれらを完全に無視しますか?それがサポートされている場合、機能の違いは何ですか?なぜこの二重性ですか? – wujek
はい、それでも動作します。ですから、 '__init __。py'ファイルを持つあなたのPython 2パッケージはすべてインポートの点では機能します(ここでは考慮されていないPython 2とPython 3の違い)。 –
チュートリアルはおそらく更新されるはずです。ドキュメントバグがオープンされていますか? –