setup.py:在尝试安装之前需要最新版本的 setuptools
setup.py: require a recent version of setuptools before trying to install
我正在创建一个包含 'typing;python_version<"3.5"'
的包 install_requires
。显然,这种 dependency specification 仅在 setuptools
的最新版本中实现。如果用户机器上的 setuptools
是旧的,他们将得到:
'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Expected version spec in
typing;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.1
添加到 install_requires
和 setup_requires
无效。它说 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 -- Specifying Minimum Build System Requirements for Python Projects 可以解决这个确切的问题。
简而言之,这个已被接受的 PEP 提议以 TOML 格式将依赖项存储在名为 pyproject.toml
的文件中。对于大多数 Python 项目,此文件的内容将是:
[build-system]
# Minimum requirements for the build system to execute.
requires = ["setuptools", "wheel"] # PEP 508 specifications.
对于这个具体问题,我们只需要将"setuptools"
替换为"setuptools>=36.2.1"
即可。
坏消息是 pip
还不支持这个。好消息是 it is implemented and will probably be shipped with pip 9.1.
我正在创建一个包含 'typing;python_version<"3.5"'
的包 install_requires
。显然,这种 dependency specification 仅在 setuptools
的最新版本中实现。如果用户机器上的 setuptools
是旧的,他们将得到:
'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Expected version spec in typing;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.1
添加到 install_requires
和 setup_requires
无效。它说 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 -- Specifying Minimum Build System Requirements for Python Projects 可以解决这个确切的问题。
简而言之,这个已被接受的 PEP 提议以 TOML 格式将依赖项存储在名为 pyproject.toml
的文件中。对于大多数 Python 项目,此文件的内容将是:
[build-system]
# Minimum requirements for the build system to execute.
requires = ["setuptools", "wheel"] # PEP 508 specifications.
对于这个具体问题,我们只需要将"setuptools"
替换为"setuptools>=36.2.1"
即可。
坏消息是 pip
还不支持这个。好消息是 it is implemented and will probably be shipped with pip 9.1.