次のようなファイル構造を持つパッケージを開発しています。
test.py
package/
__init__.py
foo_module.py
example_module.py
import package
test.pyを呼び出す場合、パッケージモジュールを次のように表示します。
>>> vars(package)
mapping_proxy({foo: <function foo at 0x…}, {example: <function example at 0x…})
つまり、すべてのモジュールのメンバーをpackage
のpackage
名前空間に入れたいのですが、モジュール自体を名前空間に入れたくないのです。package
サブパッケージではありません。
私のファイルが次のようになっているとしましょう:
foo_module.py:
def foo(bar):
return bar
example_module.py:
def example(arg):
return foo(arg)
test.py:
print(example('derp'))
test.py、example_module.py、および__init __。pyのインポートステートメントを構造化して、パッケージディレクトリの外部(つまりtest.py)およびパッケージ自体の内部(つまりfoo_module.pyおよびexample_module.py)から機能させるにはどうすればよいですか?私が試みるすべてはParent module '' not loaded, cannot perform relative import
またはを与えImportError: No module named 'module_name'
ます。
また、補足として(PEP 8による):「パッケージ内インポートの相対インポートはお勧めしません。すべてのインポートには常に絶対パッケージパスを使用してください。PEP328がPython 2.5で完全に実装されている現在でも、そのスタイルは明示的な相対インポートは積極的に推奨されていません。絶対インポートはより移植性が高く、通常は読みやすくなっています。」
Python3.3を使用しています。