微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有ContextualVersionConflict的python 3.7.6 pip setup.py测试

如何解决带有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_requirestests_requirerequirements.txt添加urllib3版本,但到目前为止还没有运气。

解决方法

可能不是您想听到的内容,但是... setup_requirestests_require已被弃用。尽管它们(可能)仍然(大部分)仍然可以正常工作,但是您可能希望寻找替代解决方案。据我所知,最常见的替代解决方案是使用Tox而不是tests_requirePEP 518来代替setup_requires

就您而言,看来setup_requires的使用只是tests_require的使用的结果。因此,通过切换为 Tox 之类的东西,您可以摆脱tests_requiresetup_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 举报,一经查实,本站将立刻删除。