代码之家  ›  专栏  ›  技术社区  ›  David Ehrmann

在库中标记支持的Python版本[重复]

  •  0
  • David Ehrmann  · 技术社区  · 7 年前

    我有一个Python库。不幸的是,我还没有将其更新为使用Python 3。

    在它的 setup.py ”我补充道

    install_requires=['python<3'],
    

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

    我应该如何在特定范围的Python解释器版本上指定我的库依赖关系?我应该加一个吗 Programming Language :: Python :: 2 :: Only 标签这真的会阻止Python3下的安装吗?如果我还想将最低版本限制为Python 2.6呢?

    我更喜欢在任何地方都有效的解决方案,但只适合在任何地方有效的解决方案 皮普 (希望不会导致 easy_install 窒息)。

    0 回复  |  直到 5 年前
        1
  •  36
  •   Guy Avraham UncaAlby    5 年前

    截至 version 9.0.1 皮普将纪念一位新的总统 python_requires 字符串,指定安装所需的Python版本,例如,如果希望强制执行最低Python版本3.3:

    setup(
        ...,
        python_requires=">=3.3"
    )
    

    看见 here 更多细节。你也看到了吗 answer 就这样。

        2
  •  18
  •   Guy Avraham UncaAlby    5 年前

    一个可能的解决办法是 测验 对于Python版本,因为 pip 不能 满足 Python版本,但当前运行的版本除外(它安装在当前Python环境中):

    import sys
    if not sys.version_info[0] == 2:
        sys.exit("Sorry, Python 3 is not supported (yet)")
    
    setup(...
    
        3
  •  3
  •   Guy Avraham UncaAlby    5 年前

    在对上面的答案发表评论并收到反馈后,我想把我的评论变成一个答案。请注意,上面的答案都很好,但根据我的经验,我发现这些答案中“缺少”了一件事,需要指出,所以这里我将说明这个问题。

    为了说明的简单性和完整性,我编写了一个非常简单的Python3项目。它使用的唯一第三方软件包是著名的SSH客户端软件包 paramiko (可以找到PyPi的官方页面。) here ).

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

    现在,为了检查 python_requires 属性“in action”,我已将其添加到项目的 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+ .这当然应该 在项目的虚拟环境3.6.9中使用当前的Python版本。

    现在,当我使用 设置。py ,意思是跑步: python3 setup.py install ,该项目成功建成。请参阅 pip3 list 在运行 python3安装程序。py安装 命令:

    (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_需要 属性,从而使项目的构建“失败”。

    本教程的第一段详细介绍了这一点 this page 也在9:00-11:00分钟内 this video

    注: 我做的 检查Python 2(或 pip 对于Python 2)。