tl;dr:如何在 some 中创建一个新的命名空间__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
, with中删除它del mod_2.numpy
,则该模块不再存在,因此mod_2.test2
已损坏。
mod_2
我可以通过创建一个包含的额外目录来实现我想要的mod_2.py
,但如果可能的话,我想保持目录结构不变。
因此,我最初的问题。
编辑:我不介意做一些名字修饰来阻止一个名字踩在另一个名字上。假设将相关位mod_2.py
放入foo._mod_2
.