あなたはpackageを扱っています。あなたが持つべきパッケージ構造は次のとおりです。
/some-parent-directory # This needs to be on sys.path
/mymodule # This is not really a module - it's a package
__init__.py # import mymodule
# init is loaded when you `import mymodule` or anything below it
some.py # import mymodule.some
implementation.py # import mymodule.implementation
files.py # import mymodule.files
/submodule
__init__.py # import mymodule.submodule
# init is loaded when you `import mymodule.submodule` or anything below it
submodule_impl.py # import mymodule.submodule.submodule_impl
goes.py # import mymodule.submodule.goes
here.py # import mymodule.submodule.here
限り親ディレクトリがsys.path
であるとして、あなたが問題なくimport mymodule
またはfrom mymodule.submodule import something
を呼び出すことができるようになります。
あなたは(私は。すなわちfrom mymodule import SomeItem
またはサブパッケージfrom mymodule.submodule import AnotherItem
から)パッケージのルートレベルから利用できるようにするために何かをしたいなら、あなたは適切な__init__.py
ファイルにインポートすることができます。
たとえば、submodule_impl.py
モジュールで定義されているクラスCustomClass
をsubmodule
から直接インポートしたいとします。あなたのsubmodule/__init__.py
は、次の含まれていなければならないでしょう。そして、
from .submodule_impl import CustomClass
あなたはsubmodule
から直接CustomClass
をインポートすることができるだろう(すなわちfrom mymodule.submodule import CustomClass
)
私はPythonフォークが 'mymodule/__ init __。py'に重要なコードを入れないことを見てきました。 [アレックスMartelli](http://stackoverflow.com/a/2361278/188535)、これとは相反すると思われる。 (私は必ずしもそれに同意しない...) – detly
それは本当です。より一般的なスタイルは、 'mymodule'の実際のコードを文書化されていないサブモジュールに入れ、それに対する公開APIを' __init __。py'にインポートすることです。有益な回答ありがとう。 – Blckknght
Pythonが明らかなことを行うには、そのような汚いハックを必要とするのは残念です。 –