在不同的目录中保持Python包具有相同的顶级名称

Keeping Python packages with the same top-level name in different directories

我有几个python包希望保存在单独的文件系统中,但不幸的是它们共享相同的顶级模块名。

举例来说,目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
/fs1
  /top
    __init__.py
    /sub1
      __init__.py

/fs2
  /top
    __init__.py
    /sub2
      __init__.py

在python 2.7中,是否有任何方法可以设置我的PYTHONPATH,以便将top.sub1top.sub2导入到同一个脚本中?添加/fs1/fs2都不起作用,因为它只允许导入两个子模块中的一个子模块(以PYTHONPATH上的第一个子模块为准)。

我可以将这两棵树复制成一棵树,但出于实际原因,我不想这样做。


有几种选择,其中一种是imp

1
2
3
4
import imp

foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()

(我的来源)

另一个是与importlib有关

相对:

1
importlib.import_module('.sub1', 'fs1.top')

绝对的:

1
importlib.import_module('fs1.top.sub1')

(我的来源)