在不同的目录中保留具有相同顶级名称的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

我有几个Python包,我想保留在不同的文件系统上,但不幸的是它们共享相同的顶级模块名

为了举例说明,目录结构如下所示:

/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包以外的任何内容。