Python:两个具有相同名称的包;你如何指定加载哪个?

时间:2012-02-08 16:44:09

标签: python import

我有两个软件包,用于安装具有相同名称的不同软件包。它们都是“包”,因为它们具有在setup.py命令中指定package=['foo']的顶级setup文件。

如果我使用distutils.core安装,则要安装的最后一个将覆盖前一个(但我认为除非.py文件都具有相同的名称,否则不会覆盖?)。如果我使用setuptools进行安装,则会将两个软件包安装到不同的鸡蛋中。

一种选择是在导入包名之前显式设置sys.path;这似乎是“非pythonic”而且很脏。

假设我在setuptools的不同eggs中安装了这两个名称相同的软件包,我该如何指定导入的软件包?

2 个答案:

答案 0 :(得分:1)

Setuptools guide提到了 - 多版本 -m )开关,它完全从 sys.path 中删除了包。您必须尽早在代码中使用 pkg_resources.require('package == version'),以便修复 sys.path 。这个建议是 easy_install 在使用 -m 时始终打印的内容。

但是您不能同时导入两者(除非它们是使用namespace packages设计的)。

答案 1 :(得分:0)

我认为解决方法的最佳方法是更改​​顶级目录的名称,除非其他包依赖于该包。

您可以通过更改setup.py或直接更改site-packages中的名称文件夹来执行此操作。鸡蛋只是元数据。

就设置sys.path而言,最好通过创建.pth文件来使用站点模块。实例化时,位于该文件中的任何路径都将添加到python路径的“头部”。

这两个包是不同的,命名是巧合,还是只是它们的分支?