将具有相同***名称的 Python 包保存在不同的目录中

Posted

技术标签:

【中文标题】将具有相同***名称的 Python 包保存在不同的目录中【英文标题】:Keeping Python packages with the same top-level name in different directories 【发布时间】:2013-07-19 12:14:07 【问题描述】:

我有几个 Python 包,我想将它们保存在单独的文件系统中,但不幸的是它们共享相同的***模块名称。

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

/fs1
  /top
    __init__.py
    /sub1
      __init__.py

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

在 Python 2.7 中,有什么方法可以设置我的 PYTHONPATH 以便我可以将 top.sub1top.sub2 导入到同一个脚本中?同时添加/fs1/fs2 不起作用,因为它只允许导入两个子模块之一(以PYTHONPATH 中的先到者为准)。

我可以将两棵树复制/符号链接为一棵,但出于实际原因,我宁愿不这样做。

【问题讨论】:

是的,有一种方法,它被称为“命名空间包”。 ***.com/questions/1675734/… 请注意,如果您这样做,top 包必须为空,该命名空间不能包含除 sub1 和 sub2 包之外的任何内容。 【参考方案1】:

有几个选项,其中之一是imp

import imp

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

(my source)


另一个是importlib

亲戚:

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

绝对:

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

(my source)

【讨论】:

以上是关于将具有相同***名称的 Python 包保存在不同的目录中的主要内容,如果未能解决你的问题,请参考以下文章