Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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/1/dart/3.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 setup.py&;pip:覆盖其中一个依赖项';s requirements.txt中的子依赖项_Python_Python 2.7_Pip_Setup.py_Requirements.txt - Fatal编程技术网

Python setup.py&;pip:覆盖其中一个依赖项';s requirements.txt中的子依赖项

Python setup.py&;pip:覆盖其中一个依赖项';s requirements.txt中的子依赖项,python,python-2.7,pip,setup.py,requirements.txt,Python,Python 2.7,Pip,Setup.py,Requirements.txt,我目前正在处理一个包,在我的requirements.txt中,我有一个依赖项:wikipedia。现在,wikipedia1.3使用requests-2.2.1,而我的软件包使用的是2.3.0版 此外,正如人们所料,wikipedia-1.3的安装取决于它的依赖关系 但是,如果我启动一个新的virtualenv并直接在我的requirements.txt中包含wikipedia,它会在请求上提供一个ImportError,因为在setup.py运行时,requests-2.3.0的setup.

我目前正在处理一个包,在我的
requirements.txt
中,我有一个依赖项:
wikipedia
。现在,
wikipedia
1.3使用
requests-2.2.1
,而我的软件包使用的是2.3.0版

此外,正如人们所料,
wikipedia-1.3
的安装取决于它的依赖关系

但是,如果我启动一个新的virtualenv并直接在我的
requirements.txt
中包含
wikipedia
,它会在
请求上提供一个
ImportError
,因为在
setup.py
运行时,
requests-2.3.0
setup.py
不会执行,除非所有其他人都执行。在下图中,解包后,
请求
没有运行
setup.py

出于某种奇怪的原因,
wikipedia
setup.py
包含
import wikipedia
,这反过来又会在安装之前导入它的依赖项;但是,它通过了CI测试,因为它通过pip单独安装需求,然后运行
setup.py

为了克服这种情况,我制作了一个设置脚本,包括:

pip install -r requirements.txt
pip install wikipedia
pip install -e .
  • 这将安装
    requests-2.3.0
    beautifulsoup4
  • 然后安装
    wikipedia
    (然后可以运行
    setup.py
    并安装
    wikipedia
    requests-2.2.1
  • 然后“pip install-e.”选项再次安装我的软件包以及
    requests-2.3.0
因此,
requests-2.3.0
首先被安装,然后被旧版本2.2.1取代,然后又被
2.3.0
取代


我试着通过各种规格说明来克服这个问题,但这些都是令人困惑的。如何克服这种混乱?

正如Martijn所指出的,正确的方法是在项目中指定一个最低版本,假设子依赖项的未来版本中保留了完全兼容性

如果无法更改需求文件,则可以下载项目并在本地编辑需求文件,以指定所需的任何版本。这可以通过
pip下载
命令完成:

pip download wikipedia==1.3
此外,如果您希望在整个过程中使用
pip
,并保留
requests==2.3.0
,而不删除并重新安装,则可以指定
约束
文件。这可以通过以下方式实现:

pip install -c constraints.txt wikipedia==1.3
其中constraints.txt包含以下内容:

requests>=2.3.0
beautifulsoup4
这将产生警告,但将安装
wikipedia
程序包:

wikipedia 1.3.0 has requirement requests==2.2.1, but you'll have requests 2.3.0 which is incompatible.
Installing collected packages: wikipedia
Successfully installed wikipedia-1.3.0
现在,如果您真的知道自己在做什么(或者只是想尝试一下,如果它有效的话),您可以使用
--no deps
标志,它将完全忽略包依赖项,并且不会产生上面的警告:

pip install --no-deps -c constraints.txt wikipedia==1.3
在这两种情况下,
pip冻结
显示:

beautifulsoup4==4.6.0
bs4==0.0.1
requests==2.3.0
wikipedia==1.3.0

注意:这是用pip 10.0.1测试的,但它应该适用于任何最新的pip版本。

解决这一问题的正确方法是告诉
wikipedia
项目不要依赖特定的版本,而是指定一个最低版本。是的,我已经这样做了,但仍然希望有办法覆盖它。还有,为什么解包后“requests”模块没有显示“running setup.py”?我大量更新了你文章的格式。尽量避免不必要的强调,在适用的地方使用代码标签。也不要使用图像显示代码输出。这使得搜索引擎(以及未来的读者)更难(如果不是不可能的话)找到这篇文章。相反,将控制台输出复制到您的帖子中。谢谢Bram。感谢您的努力。来自“只想尝试”区域的干杯