Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当一个包指定一个范围而另一个包不指定';T_Python_Pip_Setuptools_Install Requires - Fatal编程技术网

Python 当一个包指定一个范围而另一个包不指定';T

Python 当一个包指定一个范围而另一个包不指定';T,python,pip,setuptools,install-requires,Python,Pip,Setuptools,Install Requires,我有一个requirement.txt,只有两个依赖项: sentry-sdk==0.7.11 requests==2.21.0 我已经检查了这两个包的setup.py,它们都依赖于urllib3: 请求提供了一个不接受1.25的范围 sentry sdk没有指定特定的版本或范围 最近,当我使用pip安装依赖项时,发布了urllib3(1.25)的新版本。我收到以下错误: ERROR: requests 2.21.0 has requirement urllib3<1.25,>

我有一个requirement.txt,只有两个依赖项:

sentry-sdk==0.7.11
requests==2.21.0
我已经检查了这两个包的setup.py,它们都依赖于urllib3:

  • 请求提供了一个不接受1.25的范围
  • sentry sdk没有指定特定的版本或范围
最近,当我使用pip安装依赖项时,发布了urllib3(1.25)的新版本。我收到以下错误:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
ERROR:requests 2.21.0的要求urllib3=1.21.1,但您的要求urllib3 1.25不兼容。
这是预期的行为还是pip中的错误


在install\u requires中不指定依赖项版本的含义是什么?“强制更新最新版本”

您观察此行为的原因是因为pip首先安装
sentry sdk
。因为它没有版本约束,所以您得到的是最新版本(1.25)。如果要安装
请求
,则此版本不兼容

解决这个问题的唯一方法是全局解决所有版本约束,而AFAIK pip无法做到这一点

解决方案是在requirements.txt中指定所需的urllib3版本(因为您知道所使用的依赖项的版本)。对于没有约束的瞬态包来说,这可能是一个很好的实践

实际上,使用pip进行可复制构建的方法是始终这样做

pip freeze > requirements.txt

并检查结果。这样,第三方软件包更新不会破坏您的构建,您可以随时在以后手动升级(并签入结果)。

我还尝试使用pipenv(-r标志)安装依赖项,看起来pipenv能够处理依赖项解析。我想我是在期待pip提供一些它实际上没有提供的东西。显然,pip只能检测冲突,而且pip还有“check”命令。在冷冻前,检查是否存在问题可能是个好主意。