如何在pip install命令中指定依赖项版本?

时间:2019-02-13 08:52:48

标签: python python-2.7 pytest

我指定如下在Drone管道中安装pytest

pip install -q pytest

以前直到几天前突然出现以下错误之前,它一直运行良好:

+ python -m pytest test/test_dai_adrecogzer.py
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/lib/python2.7/dist-packages/pytest.py", line 14, in <module>
    from _pytest.fixtures import fillfixtures as _fillfuncargs
  File "/usr/local/lib/python2.7/dist-packages/_pytest/fixtures.py", line 16, in <module>
    from more_itertools import flatten
  File "/usr/local/lib/python2.7/dist-packages/more_itertools/__init__.py", line 1, in <module>
    from more_itertools.more import *  # noqa
  File "/usr/local/lib/python2.7/dist-packages/more_itertools/more.py", line 329
    def _collate(*iterables, key=lambda a: a, reverse=False):
                               ^

SyntaxError: invalid syntax

四处搜寻,发现一个recently post SO question似乎与我要寻找的内容紧密相关。原因似乎是由于more-itertools最近发布的6.0版本。可接受的答案建议spin使用more-itertools的某些特定版本:

setuptools.setup(
    setup_requires=['pytest-runner'],
    tests_require=['mock', 'more-itertools<6.0.0', 'pytest'],
    test_suite='tests',
    python_requires='>=2.7',
)

如何将这个建议应用于我的问题?更具体地说,当使用<6.0.0命令安装more-itertools时,如何指定pytest的{​​{1}}版本?

2 个答案:

答案 0 :(得分:1)

您可以指定具有更多itertools旧版本的pytest版本(例如:pip install pytest == 3.5.0)

我不建议将pytest与更多版本的其他迭代器(而不是setuptools中指定的版本)一起安装,因为这可能会导致其他崩溃(pytest可能在某些时候取决于您降级版本没有的某些功能) 。

答案 1 :(得分:0)

根据pytest package specs on PyPI,该软件包需要more-itertools >=4.0.0。我假设,如果在运行more-itertools之前显式安装了pip install -q pytest低于6.0.0,高于4.0.0或等于4.0.0的任何合适版本,则more-itertools的依赖项检查将已经感到满意,您可以安装pytest的最新版本。