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

kef*_*ich 7 python import

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

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

一种选择是sys.path在导入包名之前明确设置; 这似乎是"非pythonic"而且很脏.

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

Zar*_*art 2

安装工具指南提到--multi-version ( -m ) 开关,可以从sys.path中完全删除包。您必须尽早在代码中使用pkg_resources.require('package==version')来修复sys.path。当使用-m时, easy_install总是打印这个建议。

但是您不能同时导入两者(除非它们被设计为使用命名空间包来执行此操作)。

  • pip 既不支持 Eggs,也不支持多版本包。easy_install 附带 setuptools,它们是在创建 virtualenv 之前设计的。因此 setuptools 解决了多个包在 site-dir 中管理 .pth 文件的问题,而 pip 根本不打扰并依赖于 virtualenv 隔离。使用 pip,您被迫使用两个不同的 virtualenv。另请注意,“setup.pydevelop”使用easy_install的机制并将每个包安装在其自己的版本目录中。“pip安装-e。” 对 pip 的机器执行相同的操作,并将所有内容转储到站点包中。 (2认同)