安装特定版本的 setuptools 作为包的依赖项
Install specific version of setuptools as a dependency of package
我的包在依赖项中有安装工具。我试图在安装我的包时限制 setuptools 的版本。
该软件包在 setup.py 中有以下限制:
setup(
setup_requires=[
'setuptools==50.2.0',
'pip>=19,!=20.0,!=20.0.1,<21'
],
...
在pyproject.toml中也有同样的限制:
[build-system]
requires = ["setuptools==50.2.0", "pip>=19,!=20.0,!=20.0.1,<21", "wheel"] # PEP 508 specifications.
但是,当使用 pip 安装我的包时,它会下载最新的 setuptools 50.3.0。
为什么会忽略要求?我怎样才能让它不安装最新版本?
看起来很准确,50.3.0 大于 40.0,小于 51,不等于 46.0 或 50.0。您可能需要进一步限制您的要求。如果你知道你想要哪个版本,只需明确指定
编辑:
我创建了一个新的 venv 并检查了 pip list
,似乎有足够高版本的 pip,setuptools 是 50.3.0。
$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ pip3 list | grep setup
setuptools (20.7.0)
You are using pip version 8.1.1, however version 20.2.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
在venv里面(假设Python 3.x)
$ . vv/bin/activate
(vv) $ pip3 -V
pip 20.2.3 from /home/user/vv/lib/python3.5/site-packages/pip (python 3.5)
(vv) $ pip3 list | grep setup
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
setuptools 50.3.0
我认为您对构建时间(setup_requires / pyproject.toml build-system 要求)和安装时间(install_requires)感到困惑。在安装时,你会得到未固定的 setuptools,因为它是一个没有版本限制的传递依赖
setuptools
通过 install_requires
中的传递依赖被引入(特别是:jsonschema
):
$ visualize-requirements t.txt
cryptography>=2.4.2,<3
- cffi!=1.11.3,>=1.8
- pycparser
- six>=1.4.1
click>=7.0,<8
intelhex<3,>=2.2.1
python-jose<4,>=3.0.1
- pyasn1
- rsa
- pyasn1>=0.1.3
- ecdsa<0.15
- six
- six<2.0
jsonschema<4,>=3.0.0
- six>=1.11.0
- attrs>=17.4.0
- setuptools
- pyrsistent>=0.14.0
pyocd==0.27.3
- intervaltree<4.0,>=3.0.2
- sortedcontainers<3.0,>=2.0
- pylink-square
- six
- psutil>=5.2.2
- future
- cmsis-pack-manager>=0.2.7
- milksnake>=0.1.2
- cffi>=1.6.0
- pycparser
- appdirs>=1.4
- pyyaml>=3.12
- pyelftools
- six<2.0,>=1.0
- colorama
- prettytable
- pyusb>=1.0.0b2,<2.0
- pyyaml<6.0,>=5.1
- intelhex<3.0,>=2.0
cbor==1.0.0
imgtool==1.7.0a1
- intelhex>=2.2.1
- click
- cryptography>=2.4.2
- cffi!=1.11.3,>=1.8
- pycparser
- six>=1.4.1
- cbor>=1.0.0
我正在使用我编写的名为 requirements-tools
的工具中的 visualize-requirements
感谢回答和评论,我可以得出结论。
要使用特定版本的 setuptools,必须在两个位置都安装它 - pyproject.toml 和install_requires 的开头 setup.py.
像pip这样的工具会使用pyproject.toml的版本来构建项目。但是,如果有任何依赖项在其要求中具有最新版本的 setuptools,则将使用最新版本来安装依赖项。此外,环境将保留上次安装的版本。
我的包在依赖项中有安装工具。我试图在安装我的包时限制 setuptools 的版本。 该软件包在 setup.py 中有以下限制:
setup(
setup_requires=[
'setuptools==50.2.0',
'pip>=19,!=20.0,!=20.0.1,<21'
],
...
在pyproject.toml中也有同样的限制:
[build-system]
requires = ["setuptools==50.2.0", "pip>=19,!=20.0,!=20.0.1,<21", "wheel"] # PEP 508 specifications.
但是,当使用 pip 安装我的包时,它会下载最新的 setuptools 50.3.0。
为什么会忽略要求?我怎样才能让它不安装最新版本?
看起来很准确,50.3.0 大于 40.0,小于 51,不等于 46.0 或 50.0。您可能需要进一步限制您的要求。如果你知道你想要哪个版本,只需明确指定
编辑:
我创建了一个新的 venv 并检查了 pip list
,似乎有足够高版本的 pip,setuptools 是 50.3.0。
$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ pip3 list | grep setup
setuptools (20.7.0)
You are using pip version 8.1.1, however version 20.2.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
在venv里面(假设Python 3.x)
$ . vv/bin/activate
(vv) $ pip3 -V
pip 20.2.3 from /home/user/vv/lib/python3.5/site-packages/pip (python 3.5)
(vv) $ pip3 list | grep setup
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
setuptools 50.3.0
我认为您对构建时间(setup_requires / pyproject.toml build-system 要求)和安装时间(install_requires)感到困惑。在安装时,你会得到未固定的 setuptools,因为它是一个没有版本限制的传递依赖
setuptools
通过 install_requires
中的传递依赖被引入(特别是:jsonschema
):
$ visualize-requirements t.txt
cryptography>=2.4.2,<3
- cffi!=1.11.3,>=1.8
- pycparser
- six>=1.4.1
click>=7.0,<8
intelhex<3,>=2.2.1
python-jose<4,>=3.0.1
- pyasn1
- rsa
- pyasn1>=0.1.3
- ecdsa<0.15
- six
- six<2.0
jsonschema<4,>=3.0.0
- six>=1.11.0
- attrs>=17.4.0
- setuptools
- pyrsistent>=0.14.0
pyocd==0.27.3
- intervaltree<4.0,>=3.0.2
- sortedcontainers<3.0,>=2.0
- pylink-square
- six
- psutil>=5.2.2
- future
- cmsis-pack-manager>=0.2.7
- milksnake>=0.1.2
- cffi>=1.6.0
- pycparser
- appdirs>=1.4
- pyyaml>=3.12
- pyelftools
- six<2.0,>=1.0
- colorama
- prettytable
- pyusb>=1.0.0b2,<2.0
- pyyaml<6.0,>=5.1
- intelhex<3.0,>=2.0
cbor==1.0.0
imgtool==1.7.0a1
- intelhex>=2.2.1
- click
- cryptography>=2.4.2
- cffi!=1.11.3,>=1.8
- pycparser
- six>=1.4.1
- cbor>=1.0.0
我正在使用我编写的名为 requirements-tools
的工具中的visualize-requirements
感谢回答和评论,我可以得出结论。
要使用特定版本的 setuptools,必须在两个位置都安装它 - pyproject.toml 和install_requires 的开头 setup.py.
像pip这样的工具会使用pyproject.toml的版本来构建项目。但是,如果有任何依赖项在其要求中具有最新版本的 setuptools,则将使用最新版本来安装依赖项。此外,环境将保留上次安装的版本。