将具有相同***名称的 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.sub1
和 top.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 包保存在不同的目录中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?
如何将具有不同名称和相同架构的 Excel 文件导入数据库?
自动创建一个视图,该视图将所有其他具有相同名称但不同前缀和不同模式的视图联合起来