tl; dr:いくつかの名前空間に新しい名前空間を作成__init__.py
し、新しいディレクトリにサブモジュールを必要とせずに、別の名前空間の選択ビットをその名前空間にコピーするにはどうすればよいですか?
完全な質問:
パッケージにモジュールのペアがあり、ディレクトリ構造が次のようになっているとします。
foo/mod_1.py
foo/mod_2.py
foo/__init__.py
mod_1.py
以下のとおりであります:
import numpy
__all__ = ['test1']
def test1():
return numpy.zeros(10)
mod_2.py
以下のとおりであります:
import numpy
def test2():
return numpy.zeros(20)
そして__init__.py
次のように:
from mod_1 import *
import mod_2
del mod_1
これにより、多かれ少なかれ目的の名前空間が生成されます。
In [7]: dir(foo)
Out[7]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'__path__',
'mod_2',
'test1']
numpy
それがfoo.mod_2
名前空間にあることを除いて。で削除しようとすると__init__.py
、del mod_2.numpy
そのモジュールには存在しなくなったため、mod_2.test2
壊れています。
mod_2
を含む追加のディレクトリを作成することで目的を達成mod_2.py
できますが、可能であればディレクトリ構造をそのままにしておきたいと思います。
したがって、私の最初の質問。
編集:ある名前が別の名前を踏むのを防ぐために、名前を少し操作してもかまいません。mod_2.py
の関連するビットをに入れてみましょうfoo._mod_2
。