将Python置于版本控制之下是否可行?

问题描述 投票:3回答:4

在可行的情况下,我喜欢在版本控制下拥有构建所需的工具。 理想的情况是,在任何需要首先安装最少工具的机器上运行新的结账。

将Python置于版本控制之下是否可行?

python包怎么样? 由于对Docutils的依赖,我在没有安装它的情况下尝试使用Sphinx失败了。 有没有办法在没有安装的情况下使用它?

python version-control python-sphinx
4个回答
5
投票

看看virtualenvbuildout满足这些需求。

virtualenv允许您将运行项目的Python与使用该版本的Python安装的任何其他软件包隔离开来。 因此,如果您的项目需要Python xy,那么唯一的先决条件是您需要确保系统上有可用的该版本Python的副本。 您在virtualenv中安装的任何软件包都与安装在其外部的软件包完全隔离。

buildout允许您指定包依赖项,因此如果您需要sphinx来构建文档,只需将其包含在buildout.cfg文件中:

parts =
  sphinx

[sphinx]
recipe = collective.recipe.sphinxbuilder

当你运行buildout ,它将安装collective.recipe.sphinxbuilder ,在virtualenv下载并安装docutilssphinx ,并构建你的文档。

您的buildout.cfg可以包含从初始签出包含buildout.cfgbootstrap.py文件的文件夹运行所需的所有依赖项。 它使得为开发或最终部署设置系统变得非常容易。


4
投票

不,就像编译器一样,python解释器应该在系统范围内安装。 同样的事情适用于sphinx和docutils等工具(最有可能在通过您的发行版的软件包管理器安装sphinx时安装)。

这同样适用于大多数python包,特别是那些由应用程序本身使用并通过PyPi提供的包。


2
投票

与许多应用程序一样,Python不会在项目签出的任何地方“就地”运行 - 他们需要添加路径并了解设置。 这就是为什么它们要么是平台的一部分(Mac和Linux),要么是需要一个成熟的安装程序(Windows)。

考虑到这一点,最好不要将Python本身包含在存储库中 - 您仍然需要为平台选择正确的二进制安装程序并运行安装程序。 然后,如果更新版本存储库中的版本,则必须升级目标系统。 在所有这些之后,你几乎肯定没有一致的系统 - 所以破坏了在版本控制中首先使用Python的重点。

良好的版本控制和依赖关系管理确实需要保留特定版本的工具。 Setuptools包括easy_install ,这使这很容易:

easy_install "pytest==2.2.4"

请注意特定版本 - 如果您不太担心特定版本,可以省略,或者您可以指定最小版本:

easy_install "pytest>2.2"

(注意:还有其他类似的工具,包括pip)

默认情况下,您将从Pypi加载,这将在您的存储库中保留所有历史版本。 除非你真的担心特定版本会丢失,否则这很好。 如果数百万美元或生命在线,请检查该工具到您的本地存储库并使用easy_install(或类似)进行安装。

我强烈建议使用virtualenv项目来虚拟化您的Python环境。 这样做可以创建一个沙箱,easy_install可以在其中安装库和工具,从而将您与系统中意外安装的任何其他工具隔离开来。 Virtualenv还可以管理特定版本的Python。

另一个想法:如果为了构建/测试目的而复制特定环境是重点,那么请考虑使用VirtualBox,VMWare或类似的云/ OS虚拟化方法。 您可以在许多不同的计算机上运行完全相同的操作系统映像


1
投票

通常,您的版本控件应包含您的项目 。 除非您做出明确的策略决策以始终对它们进行静态链接(对于解释的代码涉及将它们保留在源树中),否则将依赖项包含在那里几乎总是一个坏主意。 听起来你想要的是Zero install ,一个启动时依赖注入器。 它本质上允许您获得静态链接的好处(如果您不想/不想进入每个相关的包管理器存储库,您的用户不需要安装您的依赖项)没有缺点(您的用户最终得到多个,可能不同步,常见依赖的版本)。

© www.soinside.com 2019 - 2024. All rights reserved.