将具有相同***名称的 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 包保存在不同的目录中的主要内容,如果未能解决你的问题,请参考以下文章

Python中一个类中具有相同名称的方法

如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?

如何将具有不同名称和相同架构的 Excel 文件导入数据库?

自动创建一个视图,该视图将所有其他具有相同名称但不同前缀和不同模式的视图联合起来

如何将相同的 SHA1 用于具有不同包名称的应用程序,作为另一个应用程序?

将时间序列与变量具有相同名称的不同观察数量合并(SAS)