arc*_*ife 11 python pip setup.py python-2.7 requirements.txt
我正在开发一个软件包,在我的工作中requirements.txt,我有一个依赖:wikipedia.现在,wikipedia1.3使用requests-2.2.1我的包使用版本2.3.0.
此外,正如人们所预料的那样,wikipedia-1.3安装取决于它的依赖性.
但是,如果我开始一个新的virtualenv和直接包括wikipedia在我的requirements.txt,它提供了一个ImportError上requests,因为当时的setup.py运行,requests-2.3.0的setup.py不执行,除非所有其他执行.在下面附的图,有没有运行setup.py了requests它就会被解开了.

出于某种奇怪的原因,wikipedia的setup.py包含import wikipedia,这反过来进口它的依赖他们甚至在安装之前; 然而,它通过了CI测试,因为它通过pip单独安装需求然后运行setup.py.
为了解决这个问题,我制作了一个包含以下内容的安装脚本:
pip install -r requirements.txt
pip install wikipedia
pip install -e .
Run Code Online (Sandbox Code Playgroud)
requests-2.3.0和beautifulsoup4;wikipedia(其然后可以运行setup.py并安装wikipedia和requests-2.2.1)requests-2.3.0再次安装我的包.因此requests-2.3.0首先安装,然后由旧版本2.2.1替换,然后再次替换2.3.0.
我尝试了如何克服这个问题的各种规范,但这些令人困惑.我怎么能克服这个烂摊子?
正如 Martijn 所指出的,正确的方法是在项目中指定一个最低版本,假设在子依赖项的未来版本中保留了完全兼容性。
如果您无法更改需求文件,您可以下载项目并在本地编辑需求文件以指定您想要的任何版本。这可以通过以下pip download命令完成:
pip download wikipedia==1.3
Run Code Online (Sandbox Code Playgroud)
除此之外,如果您想pip在整个过程中使用并保存requests==2.3.0而不删除和重新安装,您可以指定一个constraints文件。这可以通过以下方式完成:
pip install -c constraints.txt wikipedia==1.3
Run Code Online (Sandbox Code Playgroud)
其中constraints.txt 包含以下内容:
requests>=2.3.0
beautifulsoup4
Run Code Online (Sandbox Code Playgroud)
这将产生警告,但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
Run Code Online (Sandbox Code Playgroud)
现在,如果您真的知道自己在做什么(或者只是想尝试一下它是否有效),您可以使用该--no-deps标志,该标志将完全忽略包依赖项并且不会产生上述警告:
pip install --no-deps -c constraints.txt wikipedia==1.3
Run Code Online (Sandbox Code Playgroud)
在这两种情况下都pip freeze显示:
beautifulsoup4==4.6.0
bs4==0.0.1
requests==2.3.0
wikipedia==1.3.0
Run Code Online (Sandbox Code Playgroud)
注意:这是用 pip 10.0.1 测试的,但它应该适用于任何最新的 pip 版本。
| 归档时间: |
|
| 查看次数: |
2450 次 |
| 最近记录: |