setup.py:在尝试安装之前,需要最新版本的安装程序工具



我正在创建一个包含'typing;python_version<"3.5"'的包,它的install_requires .显然,这种依赖规范仅在最新版本的setuptools中实现。如果用户计算机上的setuptools较旧,他们将获得:

"install_requires"必须是包含有效项目/版本要求说明符的字符串或字符串列表;预期的版本规范 typeping;python_version<"3.5" at ;p ython_version<"3.5">

简单的解决方案是告诉用户在pip install my-package之前pip install 'setuptools>=36.2.1'。(请注意,36.2.1只是一个我知道有效的版本,不一定是绝对的最低要求(

但是有没有办法在setup.py中指定此要求以使其自动完成?向install_requiressetup_requires添加setuptools>=36.2.1不起作用。它说Installed /tmp/pip-si2fqg-build/.eggs/setuptools-38.2.5-py3.3.egg,然后给出与上面相同的错误。

您无法一次性更新setuptools并在安装脚本中使用其代码。我看到两种可能的解决方案:如果你想支持旧版本的setuptools,你不能使用env标记。使用以下sys.version_info自行实现检查:

import sys
from setuptools import setup

setup(
    name='spam',
    version='0.1',
    packages=[],
    install_requires=['typing'] if sys.version_info < (3, 5) else []
)

如果您不想支持旧版本的setuptools,请检查其版本并提前中止,并通知用户:

import sys
from distutils.version import StrictVersion
from setuptools import setup, __version__

if StrictVersion(__version__) < StrictVersion('20.2'):
    print('your setuptools version does not support PEP 508. Upgrade setuptools and repeat the installation.')
    sys.exit(1)

setup(
    name='spam',
    version='0.1',
    packages=[],
    install_requires=['typing;python_version<"3.5"']
)

我刚刚了解了PEP 518 - 为Python项目指定最低构建系统要求,以解决这个确切的问题。

简而言之,这个公认的 PEP 建议将依赖项以 TOML 格式存储在名为 pyproject.toml 的文件中。对于大多数 Python 项目,此文件的内容将是:

[build-system]
# Minimum requirements for the build system to execute.
requires = ["setuptools", "wheel"]  # PEP 508 specifications.

在这个特定问题的情况下,我们只需要用 "setuptools>=36.2.1" 替换"setuptools" .

坏消息是pip还不支持这一点。好消息是它已经实现,并且可能会随 pip 9.1 一起提供。

相关内容

  • 没有找到相关文章

最新更新