在不同的目录中保留具有相同顶级名称的Python包
我有几个Python包,我想保留在不同的文件系统上,但不幸的是它们共享相同的顶级模块名 为了举例说明,目录结构如下所示:在不同的目录中保留具有相同顶级名称的Python包,python,python-2.7,python-import,python-module,pythonpath,Python,Python 2.7,Python Import,Python Module,Pythonpath,我有几个Python包,我想保留在不同的文件系统上,但不幸的是它们共享相同的顶级模块名 为了举例说明,目录结构如下所示: /fs1 /top __init__.py /sub1 __init__.py /fs2 /top __init__.py /sub2 __init__.py 在Python2.7中,是否有任何方法可以设置我的PYTHONPATH,以便将top.sub1和top.sub2导入到同一脚本中?添加/fs1和/fs
/fs1
/top
__init__.py
/sub1
__init__.py
/fs2
/top
__init__.py
/sub2
__init__.py
在Python2.7中,是否有任何方法可以设置我的PYTHONPATH
,以便将top.sub1
和top.sub2
导入到同一脚本中?添加/fs1
和/fs2
都不起作用,因为它只允许导入两个子模块中的一个子模块(以PYTHONPATH
上的第一个子模块为准)
我可以将这两棵树复制/符号链接为一棵树,但出于实际原因,我不愿意这样做。有几个选项,其中一个是
imp
:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
()
另一个是使用
importlib
亲属:
importlib.import_module('.sub1', 'fs1.top')
绝对:
importlib.import_module('fs1.top.sub1')
()是的,有一种方法,叫做“名称空间包”。请注意,如果执行此操作,则
top
包必须为空,该命名空间不能包含sub1和sub2包以外的任何内容。