Python 作为软件包的依赖项安装特定版本的setuptools

Python 作为软件包的依赖项安装特定版本的setuptools,python,pip,setuptools,setup.py,pyproject.toml,Python,Pip,Setuptools,Setup.py,Pyproject.toml,我的软件包在依赖项中包含setuptools。安装软件包时,我试图限制setuptools的版本。 程序包在setup.py中有以下限制: setup( setup_requires=[ 'setuptools==50.2.0', 'pip>=19,!=20.0,!=20.0.1,<21' ], ... 设置( 设置\u需要=[ 'setuptools==50.2.0', “pip>=19,!=20.0,!=20.0.1,似乎

我的软件包在依赖项中包含setuptools。安装软件包时,我试图限制setuptools的版本。 程序包在setup.py中有以下限制:

setup(
    setup_requires=[
        'setuptools==50.2.0',
        'pip>=19,!=20.0,!=20.0.1,<21'
        ],
...
设置(
设置\u需要=[
'setuptools==50.2.0',

“pip>=19,!=20.0,!=20.0.1,似乎很准确,50.3.0大于40.0,小于51,不等于46.0或50.0。您可能需要进一步限制您的要求。如果您知道需要哪个版本,只需明确指定即可

编辑:

我创建了一个新的venv并检查了
pip列表
,似乎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)


我认为您对构建时间(setup_requires/pyproject.toml build system requires)和安装时间(install_requires)感到困惑。在安装时,您会得到未固定的setuptools,因为它是一个无版本限制的可传递依赖项

setuptools
是通过
install\u requires
中的可传递依赖项拉入的(特别是:
jsonschema
):

$visualizerequirements t.txt
密码学>=2.4.2,=1.8
-pycparser
-六个>=1.4.1
单击>=7.0,=0.1.3
-ecdsa=17.4.0
-设置工具
-电阻>=0.14.0
pyocd==0.27.3
-间隔树=3.0.2
-分拣集装箱=2.0
-派林克广场
-六
-psutil>=5.2.2
-未来
-cmsis包管理器>=0.2.7
-奶昔>=0.1.2
-cffi>=1.6.0
-pycparser
-appdirs>=1.4
-Pyaml>=3.12
-pyelftools
-六=1.0
-科洛拉玛
-漂亮的
-pyusb>=1.0.0b2,=2.2.1
-点击
-密码学>=2.4.2
-cffi!=1.11.3,>=1.8
-pycparser
-六个>=1.4.1
-cbor>=1.0.0

我正在使用一个名为

的工具中的
可视化需求
,多亏了我可以得出结论的答案和评论

要使用特定版本的setuptools,必须在pyproject.toml和setup.py安装开始时将其放在这两个位置


像pip这样的工具将使用pyproject.toml中的版本来构建项目。但是,如果有任何依赖项的需求中包含最新版本的setuptools,则将使用最新版本来安装该依赖项。此外,环境将保留上次安装的版本。

我相信没有使用案例如果将
setuptools
pip
添加到
setup\u requires
中是有意义的,同样,我想不出将
pip
添加到
build system.requires
中是有意义的。另一方面
setuptools
(可能还有
wheel
,但我有疑问)在
buildsystem.requires
中,似乎应该做正确的事情。在python这样的环境中:,你可以通过多种方式做一件事,这取决于你的出发点。向需求中添加
pip
可能没有多大意义,但我可以看出有些系统没有现成的
setuptools
(尤其是较旧的Python版本)能否共享软件包的其余部分,特别是
install\u需要什么?@AnthonySottile,
install\u需要什么=['cryptography>=2.4.2,=7.0,=2.2.1,=3.0.1,=3.0.0,好吧。但@rite2hh在他的回答中已经说过了一段时间:版本在范围内。现在版本范围已更正(固定到单个版本号),Anthony Sottile提出了一个观点,即存在构建时依赖项和运行时依赖项。您的问题只是关于构建依赖项(仅限于这些依赖项),而与安装无关。--因此问题仍然是您关心的“它下载最新的setuptools 50.3.0”是什么?您是否关心构建时或运行时?仅限于v50.2.0,但仍安装50.3.0-
requires=[“setuptools==50.2.0”,“pip>=19,!=20.0,!=20.0.1,它是预安装的吗?请确保您从一个干净的环境中重新开始。如果它是使用
pip
安装的,可以尝试
--强制重新安装
-I/--忽略已安装的
来忽略同一软件包以前的安装(
pip3安装--帮助
)不,我以前清理过我的虚拟环境。@Elephant,检查编辑,看看是否有帮助,您可能必须强制降级(我不知道如何从顶部开始)你是说setuptools是与jsonschema一起安装的吗?我刚刚尝试从我的包pyproject.toml文件中删除setuptools,得到了
ModuleNotFoundError:没有名为“setuptools”的模块
我想你对构建时间(setup\u需要/pyproject.toml构建系统需要)和安装时间感到困惑(install_requires)。在安装时,您会得到未固定的setuptools,因为它是一个无版本限制的可传递依赖项。因为需求是按顺序处理的,所以顺序很重要,保持
setuptools
作为第一个“需求”将始终符合此要求。@Elephant,我正在测试您的setup.py文件
$ 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.
$ . 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
$ 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