【发布时间】:2013-05-24 02:22:36
【问题描述】:
如何使用 setuptools 安装同一个包的多个版本,具有相同的包版本号?然后我将如何导入所需的包?
是否可以覆盖版本号,即告诉 setuptools 将 Foo-1.1 安装为 Foo-1.1_openmpi?
即
- 我使用 open mpi 编译 Foo-1.1
- 还有 Foo-1.1 使用不同的 mpi 版本
- 再次使用不同 QT 版本的 Foo-1.1
注意,不要将这与安装多个具有不同版本号的软件包(即 foo1.1 和 foo1.2)混淆。
【问题讨论】:
-
不,对于
easy_install,egg 版本号和平台名称是唯一两个使 Egg 独一无二的值。你不能覆盖它。一般来说,避免使用二进制鸡蛋,只分发和安装源包。 -
您可以尝试欺骗它(通过编辑包)在名称或版本号上附加额外的内容,但这会在以后混淆 setuptools/easy_install/pip。
-
你需要多个版本吗?如果没有,例如你只是在测试各种包版本,我建议
virtualenv。 -
另外,即使你设法完成了这项工作,你最终也会在顶层有两个名称完全相同的模块或包,因此
import Foo将导入其中一个,并且根本没有办法导入另一个(我认为它甚至没有很好地定义哪个是哪个)。 -
解决这个问题的最简单方法可能是分叉源并在变体版本中重命名模块和 setuptools 包。这可能需要一些手动或半自动的清理工作,但实际上,这是获得两个可以同时单独导入的工作的唯一方法。
标签: python setuptools