PIP/Python是否支持同一软件包的多个版本?

7
假设我有一个名为foo的软件包,foo打包了二进制共享对象,并在多个Python脚本中使用。
  • Foo v1 (共享对象)
    • Bar v1 (需要 Foo v1)
    • Baz v1 (需要 Foo v1)
现在我想推出一个新的破坏性更新到Foo。
  • Foo v2 (共享对象)
    • Bar v2 (需要 Foo v2)
  • Foo v1 (共享对象)
    • Bar v1 (需要 Foo v1)
    • Baz v1 (需要 Foo v1)
旧版本的依赖关系可以在PyPI上分发吗?如果可以,怎么做?

需要 Foo v2 的 Bar v2,对吧? - phd
@phd 是的,那是正确的。 - Evan Carroll
1
请先编辑并修正您的问题。 - phd
我不太明白这个问题。PyPI 不会自动删除包或版本,您可以存储任意多个版本。 - phd
无论如何,在一个程序中不能使用两个不同版本的包。 - phd
显示剩余2条评论
1个回答

7
Pypi可以跟踪并记录同一软件包的多个版本,不会出现问题。在使用pip安装软件包时,还可以明确引用特定版本的软件包。
但是,给定环境(或虚拟环境)只能携带给定软件包的一个版本。如果要求pip将BAR更新为V2,则FOO也将被更新,FOO V1将被替换。
要在同一台计算机上同时开发FOO V1和FOO V2,必须使用virtualenv并创建单独的虚拟环境,每个FOO版本都将驻留在其中而不会相互干扰。每个虚拟环境都有自己的site-packages,携带每个特定版本的软件包。
Virtualenv会创建使用主要安装作为模型的Python的备用“安装”。然后,您可以切换到virtualenv并在其中安装任何软件包,它们将保留在此特定环境中。
deactivate将返回全局环境。
创建第二个环境并在其中安装不同的软件包集。
然后,您可以通过从每个环境运行激活脚本(根据您的平台,实际脚本可能略有不同,在Windows下,它将位于env-root / Scripts / activate.bat或activate.ps1,如果您喜欢从powershell工作)轻松切换其中一个。
安装virtualenv。
pip install virtualenv

在当前文件夹中创建名为FIZ的环境。
virtualenv FIZ

激活此环境(假设是Windows普通Shell)

FIZ\Scripts\activate.bat

您将看到提示信息会改变,添加FIZ,表示您当前处于此环境。您安装的任何内容都将限制在FIZ环境中,并且只有在激活后才可用。
pip install click

例如,将安装click(一个帮助创建命令行界面的库)的最新版本。
pip install click==6.1

将删除任何版本的 click,并明确替换为版本 6.1

停用环境

deactivate

创建第二个环境 FUZ
virtualenv FUZ

激活此环境将允许您在计算机上同时安装与 FIZ 中不同版本的 click(或其他内容),但在任何给定时间只能使用一个版本。虽然从技术上讲,您可以打开两个 shell 窗口并同时运行两个环境。希望这有所帮助!以下是有关该主题的一些额外阅读材料:
- pip 和 virtualenv 入门 - virtualenv 官方文档 - pip 用户指南(安装软件包和处理版本) - Pip 快速入门 最后,我强烈推荐阅读Python 之旅指南,它对我学习 Python 有很大帮助。

1
你对如何做这个有什么指针吗?这正是我在寻找的东西。如果没有了解虚拟环境,是否容易在答案中展示?或者你能否给我提供一些阅读材料。我知道有pip和新的官方pipenv。 - Evan Carroll
添加了更多信息,希望这有所帮助! - Newtopian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接