我有两个软件包,用于安装具有相同名称的不同软件包。它们都是“包”,因为它们具有在setup.py
命令中指定package=['foo']
的顶级setup
文件。
如果我使用distutils.core
安装,则要安装的最后一个将覆盖前一个(但我认为除非.py文件都具有相同的名称,否则不会覆盖?)。如果我使用setuptools
进行安装,则会将两个软件包安装到不同的鸡蛋中。
一种选择是在导入包名之前显式设置sys.path
;这似乎是“非pythonic”而且很脏。
假设我在setuptools的不同eggs
中安装了这两个名称相同的软件包,我该如何指定导入的软件包?
答案 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路径的“头部”。
这两个包是不同的,命名是巧合,还是只是它们的分支?