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

时间:2018-01-18 23:39:07

标签: python-3.x pip pypi semantic-versioning packing

假设我有一个包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)

semvar中具有不同主要版本的旧依赖项是否可以通过PyPI分发?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:2)

Pypi可以并且将会毫无问题地跟踪同一个包的多个版本。在使用pip安装包时,您还可以显式引用包的特定版本。

但是,给定环境(或虚拟环境)只会携带给定包的单个版本。如果你要求pip将BAR更新为V2,那么FOO也将被更新,FOO V1将被替换。

要在同一台计算机上同时使用FOO V1和FOO V2进行开发,您必须使用virtualenv并创建一个单独的虚拟环境,其中每个版本的FOO将驻留而不会产生干扰。每个都有它自己的站点包,承载每个特定版本的包。

Virtualenv将使用主安装作为模型创建python的备用“安装”。然后,您可以切换到virtualenv并在那里安装所需的任何软件包,它们将保留在这个特定的环境中。

deactivate将返回全局环境。

创建第二个环境并在其中安装一组不同的包。

然后,您可以通过从每个环境运行激活脚本轻松地从一个切换到另一个(取决于您的平台,实际脚本可能略有不同,在Windows下它将在env-root / Scripts / activate.bat或激活.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

将删除任何版本的点击并明确替换版本6.1

停用环境

deactivate

创建第二个环境FUZ

virtualenv FUZ

激活此环境将允许您安装与FIZ中显示的不同版本的点击(或其他),并且两者都将在您的计算机上连续生存,但在任何给定时间只能使用一个 。虽然从技术上讲,你可以打开两个shell窗口,同时让两个环境都处于活动状态。

希望这有帮助!

这里有一些关于这个主题的额外阅读

最后我热烈推荐Hitchhiker's guide to python帮助我加快速度。