setup.py:在尝试安装之前需要最新版本的 setuptools

AXO*_*AXO 5 python setuptools setup.py install-requires

我创建了一个包'typing;python_version<"3.5"'在里面的install_requires。显然,这种依赖规范只在最近版本的setuptools. 如果setuptools用户机器上的 旧的,他们会得到:

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

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

但是有没有什么方法可以指定这个要求setup.py,让它自动完成?添加setuptools>=36.2.1install_requiressetup_requires没有工作。它说Installed /tmp/pip-si2fqg-build/.eggs/setuptools-38.2.5-py3.3.egg然后给出与上面相同的错误。

hoe*_*ing 5

您无法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 []
)
Run Code Online (Sandbox Code Playgroud)

如果您不想支持旧版本的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"']
)
Run Code Online (Sandbox Code Playgroud)