不久前,我开始了解virtualenv和pyenv,并将它们分开使用了一段时间。最近,在研究Python开发的最佳实践和工具时,我发现了pyenv-virtualenv。我发现它很有用(它负责使用正确的方法创建虚拟环境,具体取决于Python )和干净(因为venv目录与您的代码库没有纠缠)。
我发现的问题是,以前(单独使用pyenv和virtualenv时)我会将requirements.txt文件和.python-version文件推到存储库中。几个月后,当克隆该项目时,我可以使用requirements.txt重新创建虚拟环境,并检查.python-version以查看我开发的是哪个Python版本。
然而,对于pyenv-virtualenv,.python-version文件就不那么有用了。由于在pyenv-virtualenv中,虚拟环境被视为pyenv中的一个新版本,并且将项目链接到虚拟环境的方法是“将Python版本设置为该虚拟环境”,因此文件不再包含您正在使用的确切的Python版本。
让我们假设我正在研究Euler项目,并决定使用pyenv-virtualenv为它创建一个虚拟环境,我称之为project_euler。为了使我的代码库能够在这个虚拟环境上运行,我需要转到项目的目录并键入:pyenv local project_euler。
现在,所有的东西在本地都很好,但是当我在几个月后推到我的存储库并再次获取它时,.python-version就不会太有用了,因为它只会说"project_euler“。此外,如果下载存储库的人也有一个名为project_euler的虚拟环境,它的配置与我推送时使用的虚拟机不同,他们可能使用错误配置的环境而没有意识到这一点。在分别使用pyenv和virtualenv时,这并不是一个问题,因为.python-version只包含了当时的Python信息,而没有包含正在使用的虚拟环境的名称。
处理这些问题的最佳做法是什么?我可以想到几种选择:
project_euler_3.5.3 (请注意,这不会解决错误使用错误的虚拟环境的问题)。.python-version,而是在README中记录支持的最低版本。.python-version,也不要记录Python (似乎不对,因为即使在小版本之间也存在追溯兼容性问题。3.5vs3.4--所以不应该由用户来猜测)。发布于 2018-04-08 07:41:28
发布于 2018-04-07 19:35:51
简单的回答是,使用pip/virtualenv,您不能。两者都假定安装了兼容的Python运行时(毕竟它们是Python包)。在自述文件中指定版本是解决这一问题的方法。
您可以考虑编写自定义安装脚本,但这正是setuptools工具的目的。您可以用python_requires在setup.py中指定所需的Python版本。如果不存在所需的Python,并且有许多方法来处理其他自定义安装需求,这将提供一个合理的错误消息。
这似乎是管理版本的另一种方式,但它是Python标准,有许多优点,包括多年的社区知识。
https://softwareengineering.stackexchange.com/questions/351911
复制相似问题