如何解决带有ContextualVersionConflict的python 3.7.6 pip setup.py测试
我的setup.py
如下:
from setuptools import find_packages,setup
tests_require = ['pytest-env','pytest-mock','pytest-cov','pytest-xdist','pytest','mock','moto<=1.3.10']
setup(
name='repo_name',version='0.1.0',description='repo_name',keywords=['?'],packages=find_packages('src',exclude=['tests','venv']),package_dir={'': 'src'},package_data={'': ['schema/*.yaml']},install_requires=[
'boto3<=1.10.19','requests<=2.22.0','jsonschema<=3.0.1','objectpath<=0.6.1','pyyaml<=5.1.1','sqlalchemy<=1.3.5','psycopg2-binary<=2.8.3','auth-client<=1.0.23',# internal package
'policy_client<=1.0.9',# internal package
'audit-client<=1.1.20',# internal package
'flask<=1.1.1','click<=7.0','Werkzeug<=0.15.5','itsdangerous<=1.1.0','Jinja2<=2.10.1','MarkupSafe<=1.1.1','structlog<=19.2.0','python-rapidjson<=0.9.1'
],setup_requires=['pytest-runner'],tests_require=tests_require,extras_require={'test': tests_require},include_package_data=True,zip_safe=False
)
运行python setup.py test
时,它将始终将我已经安装的大多数软件包重新安装到.eggs
文件夹中,据我了解。在安装install_requires
部分中提供的不同版本的软件包时,会导致以下错误:
pkg_resources.ContextualVersionConflict: (urllib3 1.25.10 (/Users/***/Desktop/repo/.eggs/urllib3-1.25.10-py3.7.egg),Requirement.parse('urllib3<1.25,>=1.21.1'),{'requests'})
我必须将requests
版本固定为2.22.0,这要求urllib3
版本不大于1.25,这导致了我的问题。因此,无论如何,我是否可以将urllib3
版本固定在某个地方,以便在其运行时仅安装提供的版本?我已经尝试在install_requires
,tests_require
和requirements.txt
中添加urllib3版本,但到目前为止还没有运气。
解决方法
可能不是您想听到的内容,但是... setup_requires
和tests_require
已被弃用。尽管它们(可能)仍然(大部分)仍然可以正常工作,但是您可能希望寻找替代解决方案。据我所知,最常见的替代解决方案是使用Tox而不是tests_require
和PEP 518来代替setup_requires
。
就您而言,看来setup_requires
的使用只是tests_require
的使用的结果。因此,通过切换为 Tox 之类的东西,您可以摆脱tests_require
和setup_requires
的使用。
我决心简单地将python setup.py test
替换为pip instll -e . [test]
,然后直接替换为pytest
。
它仍将安装所有tests_require
软件包,然后直接运行pytest
。而不是浏览所有列表软件包并找到所有软件包的最佳匹配版本。
更新:
真正的问题是,在更改软件包版本时,我没有删除旧的 .eggs / 和 venv / 文件夹。因此,解决方案是将setup.py文件中的requests
版本更新为2.21.0,然后删除 .eggs / 和 venv / 文件夹并重新运行一切。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。