使用pip安装包的多个版本

lim*_*boy 63 python pip

在我的应用程序中,我想使用:

  • packageA,这需要 packageX==1.3
  • packageB,这需要 packageX==1.4
  • packageX==1.5

如何安装packageX带pip的多个版本来处理这种情况?

e-s*_*tis 47

pip对此没有帮助.

您可以告诉它安装特定版本,但它会覆盖另一个版本.另一方面,使用两个virtualenvs可以让你在同一台机器上安装这两个版本,但不能同时使用它们.

最好的办法是手动安装这两个版本,方法是将它们放在Python路径中,并使用不同的名称.

但是如果你的两个库希望它们具有相同的名称(并且它们应该),则必须修改它们,以便它们使用一些导入别名来获取它们所需的版本,例如:

import dependencyname_version as dependencyname
Run Code Online (Sandbox Code Playgroud)

目前还没有干净的方法来做到这一点.你希望最好的办法是让这个黑客工作.

我宁愿抛弃两个库中的一个并用等效的替换它,或者修补它以接受新版本的依赖项并将补丁返回给社区.

  • 还有解决方案吗? (33认同)
  • @David 包管理器使用版本控制,但当你想安装多个版本时完全忽略它,这是多么愚蠢的事情,哈哈 (9认同)
  • 还是没有解决办法吗? (5认同)
  • 很多语言都有这个问题...Java、Go、Haxe...希望语言设计者能够放弃全局包命名空间,并在他们创建的未来语言中采用更像 Node.js 的模块系统,因为 Node.js 支持多个版本依赖关系。 (3认同)
  • 使用 maven 或 gradle,您可以安装同一包的两个版本,而使用 pip 则不能。但您仍然不能在同一个程序中使用同一包的两个版本。 (2认同)

sAg*_*aga 13

下载ea的源代码.包.将每个安装在自己的单独文件夹中.例如.我有1.10版本的软件包,但是想要切换到dev版本进行一些工作.我下载了dev模块的源代码: git clone https://github.com/networkx/networkx.git cd netwokrx 我为这个版本创建了一个文件夹: mkdir /home/username/opt/python,然后我将PYTHONPATH env var设置为:export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/.接下来,我用以下方法安装它:python setup.py install --prefix=/home/username/opt/python

现在,由于我的PYTHONPATH现在指向其他site-packages文件夹,当我在命令行上运行python并导入新模块时,它可以工作.要切换回切换,请从PYTHONPATH中删除新文件夹.

>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'
Run Code Online (Sandbox Code Playgroud)

  • 哈,特地来这里是因为我正在与 `networkx` 版本差异作斗争! (2认同)