【问题标题】:Install multiple versions of the same package (with same version number) with setuptools使用 setuptools 安装同一包的多个版本(具有相同的版本号)
【发布时间】: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


【解决方案1】:

除非您实际上需要同时使用同一包的不同版本(为什么?!),否则我建议您通过virtualenv 使用 Python 虚拟环境。

这使您可以轻松创建隔离的虚拟环境来运行 Python。每个都非常便宜,不需要真正的时间来创建。在每一个中,您都可以安装(通过pip/easy_install 或手动使用setup.py)您想要测试的任何包(我假设您正在尝试这样做)。

相关:

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 2018-08-10
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多