当前位置: 首页 > 知识库问答 >
问题:

作为包的依赖项安装setupols的特定版本

昌正奇
2023-03-14

我的软件包在依赖项中包含setuptools。安装软件包时,我试图限制setuptools的版本。软件包在安装中有以下限制。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安装my package时,它会下载最新的setuptools 50.3。0

为什么它忽视了这些要求?如何使其不安装最新版本?

共有3个答案

邓焱
2023-03-14

多亏了这些答案和评论,我才能得出结论。

要使用setupool的特定版本,必须在两个位置都有它——pyproject.toml和setup.py.install_requires开始

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

双恩
2023-03-14

似乎准确,50.3。0大于40.0、小于51且不等于46.0或50.0。您可能需要进一步限制您的要求。如果您知道需要哪个版本,只需显式地指定它

编辑:

我创建了一个新的venv,并检查了pip list,似乎有了足够高的pip版本,setupols的版本是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
左丘阳晖
2023-03-14

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

setuptools是通过install\u 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

我正在使用我写的一个叫做需求工具的工具中的可视化需求

 类似资料:
  • 安装包时(通过使用python setup.py install),依赖项从python包索引(pypi.python.org)获取。但我的目标主机无法访问internet。我已将依赖项放在本地目录下,如下所示。 通过运行?

  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 我已经创建了作曲家包,composer.json是 现在,当我安装 包,我需要那个作曲家安装所有需要的包: 但它没有安装它。 我尝试作曲家更新,作曲家安装。有人能帮忙吗? C项目omposer.json看起来像 我能做的是,作曲家自动安装所有软件包所需的依赖项????谢谢你的建议。

  • Maven插件(maven-compiler-plugin: 3.8.1和maven-surefire-plugin: 3.0.0-M3)在运行mvn清洁包时似乎正在下载同一依赖项(plexus-utils)的多个版本,即使我在依赖项中指定了plexus-utils的最新版本。这不会导致任何错误,但3.0.16之前的任何版本的plexus-utils都容易受到命令注入的影响。有没有办法阻止这种情况

  • 问题内容: 我已经通过安装了一些软件包,而没有设置第一个软件包。现在,我想创建一个文件,但是将所有已安装的软件包保留为依赖项。简单运行不提供此选项,我可以自动实现吗? 问题答案: 2016年1月更新 npm 现在开箱即用。我有npm 3.5.2 版本。 因此仅安装了 下划线* 的 node_modules 文件夹。 * 然后: 包含在package.json中:

  • 本文向大家介绍python安装mysql的依赖包mysql-python操作,包括了python安装mysql的依赖包mysql-python操作的使用技巧和注意事项,需要的朋友参考一下 一般情况下,使用pip命令安装即可: 但是在实际工作环境中,往往会安装失败,这是因为系统缺少mysql的相关依赖组件。所以必须先安装mysql-devel类的包,而且必须要对应好mysql客户端的版本,即要安装好