setup.py:限制python解释器的允许版本

时间:2012-12-18 01:19:27

标签: python pip easy-install setup.py

我有一个python库。不幸的是我还没有更新它以使用python 3。

在setup.py中,我添加了

install_requires=['python<3'],

我的意图是不允许在python 3下安装/使用这个包,因为我知道它还没有(还)工作。我不认为这是正确的方法,因为pip然后尝试下载并安装python 2.7.3(已经是已安装的版本!)。

我应该如何在特定范围的python解释器版本上指定我的库依赖?我应该添加Programming Language :: Python :: 2 :: Only代码吗?这实际上会阻止在python 3下安装吗?如果我还想将最低版本限制为python 2.6怎么办?

我更喜欢一种可以在任何地方使用的解决方案,但我会选择仅适用于pip的解决方案(希望不会导致easy_install阻塞)。

3 个答案:

答案 0 :(得分:21)

version 9.0.1开始,pip将使用新的<button id="submit" type="submit" data-loading-text="Loading..." class="btn btn-primary">Debug it!</button> 字符串,指定安装所需的python版本,例如:

python_requires

有关详细信息,请参阅here。另请参阅此问题answer

答案 1 :(得分:17)

一个可能的解决方案是 test 用于python版本,因为pip不能满足 python版本,除了它当前运行的版本(它安装在当前的python环境):

import sys
if not sys.version_info[0] == 2:
    sys.exit("Sorry, Python 3 is not supported (yet)")

setup(...

答案 2 :(得分:0)

在评论以上答案并收到反馈后,我想将我的评论变成答案。请注意,上面的答案都很好,但是根据我的经验,我发现这些答案中有一个“遗漏”的东西,需要指出,所以在这里我将举例说明这个问题。

为了简化和完整说明,我组成了一个非常简单的Python 3项目。它使用的唯一第三方软件包是著名的SSH客户端软件包paramiko(可以在here上找到其官方PyPi页面)。

项目虚拟环境中的Python解释器的版本为 3.6.9

现在,为了检查“ python_requires”属性的使用情况,我将其添加到了项目的setup.py脚本中,该脚本如下所示:

from setuptools import setup, find_packages

setup(name='mySampleProject',
      version='1.0',
      description='Sample project in Python 3',
      author='Guy Avraham',
      license='MIT',
      packages=find_packages(),
      include_package_data=True,
      python_requires='>=3.8',
      install_requires=['paramiko'])

请注意,我“要求” Python版本为 3.8 + 。当然,这应该与项目虚拟环境中的当前Python版本3.6.9一起使用。

现在,当我使用setup.py中的“正常”用法构建项目时,意味着通过运行python3 setup.py install,该项目已成功构建。运行pip3 list命令后,请参见python3 setup.py install命令的以下输出:

(mySampleProject_env) guya@ubuntu:~/mySampleProject$ pip3 list
DEPRECATION: The default format will switch to columns in the future. You can use -- 
format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
bcrypt (3.2.0)
cffi (1.14.3)
cryptography (3.1.1)
mySampleProject (1.0)
paramiko (2.7.2)
pip (9.0.1)
pkg-resources (0.0.0)
pycparser (2.20)
PyNaCl (1.4.0)
setuptools (39.0.1)
six (1.15.0)

如您所见,即使我不期望它也已安装了项目及其所有“子依赖项”。

另一方面,当我使用以下命令安装项目:pip3 install -e .(注意.表示“当前工作目录”)时,我得到了以下输出:

(mySampleProject_env) guya@ubuntu:~/mySampleProject$ pip3 install -e .
Obtaining file:///home/guya/mySampleProject
mySampleProject requires Python '>=3.8' but the running Python is 3.6.9

实际上,现在“考虑” python_requires属性,从而“失败”了项目的构建。

this page的教程的第一段中对此进行了详细说明 以及在this video

中的〜09:00-11:00之间

注意::对于Python 2(或对于Python 2,pip),我没有做检查。