'之间的依赖冲突;设置需要';和';安装需要';在Python包中

'之间的依赖冲突;设置需要';和';安装需要';在Python包中,python,setuptools,Python,Setuptools,我在尝试安装和测试我的软件包时遇到了一个错误 该错误是由两个软件包的可传递依赖项版本冲突引起的-一个在setup\u requires(twine)中,另一个在install\u requires(tensorflow)中 两者都过渡地依赖于漂白剂,每个版本都不同 使用pip install-e.或python setup.py develope安装软件包可以正常工作 运行python setup.py test时,会发生错误(注意:只有在安装后运行测试时才会发生这种情况。如果没有首先安装包,则

我在尝试安装和测试我的软件包时遇到了一个错误

该错误是由两个软件包的可传递依赖项版本冲突引起的-一个在
setup\u requires
twine
)中,另一个在
install\u requires
tensorflow
)中

两者都过渡地依赖于漂白剂,每个版本都不同

使用
pip install-e.
python setup.py develope
安装软件包可以正常工作

运行
python setup.py test
时,会发生错误(注意:只有在安装后运行测试时才会发生这种情况。如果没有首先安装包,则不会发生错误)

setup.cfg如下所示:

[metadata]
name = test
version = 0.0.1

[options]
package_dir=
    = src

packages=find:

setup_requires =
    setuptools >= 40.0.0
    pip >= 10
    pytest-runner >= 2.0
    twine >= 1.0.0

install_requires =
    tensorflow == 1.6.0


tests_require =
    pytest >=3.0, <4.0

[options.packages.find]
where=src

[aliases]
test=pytest
from setuptools import setup

setup()
步骤:

  • 运行
    pip安装-e.
  • 运行
    python setup.py测试
  • 环境:

    • python:3.6
      Docker image
    我认为正在发生的事情 据我所知,在运行命令(安装和测试)时,会安装
    setup\u requires
    中的包,并将egg文件放在.eggs目录中

    当运行
    python setup.py test
    时,setuptools会安装
    install\u requires
    中的所有软件包,但会发现其中一个依赖项已经有一个egg,并使用它

    我不确定确切的机制是什么

    可能的解决方案
    • 使用更新版本的tensorflow。这就解决了冲突
    • 或者:从
      设置中移除
      捆绳
      -我意识到设置不需要它
    • 或者:不要在本地安装软件包。仅运行
      python setup.py测试
    问题 虽然我能够解决这个具体案例中的问题,但我仍然想知道更多关于最初导致问题的原因

    • .eggs目录是在什么时候创建的
    • 为什么安装工作正常,但测试失败
    • 为什么只有在安装后测试才会失败
    • 有没有办法防止冲突的发生

    您遇到了一个依赖地狱的案例
    tensorflow==1.6.0
    需要
    tensorboard==1.6.0
    这需要
    漂白剂==1.5.0
    。您的安装要求包含
    twine
    ,它需要
    自述呈现程序
    ,需要
    漂白剂>=2.1.0
    ,因此您基本上无法安装用于开发的软件包。测试时出现错误,因为
    pytestrunner
    安装所有安装依赖项以生成egg信息元数据。
    [metadata]
    name = test
    version = 0.0.1
    
    [options]
    package_dir=
        = src
    
    packages=find:
    
    setup_requires =
        setuptools >= 40.0.0
        pip >= 10
        pytest-runner >= 2.0
        twine >= 1.0.0
    
    install_requires =
        tensorflow == 1.6.0
    
    
    tests_require =
        pytest >=3.0, <4.0
    
    [options.packages.find]
    where=src
    
    [aliases]
    test=pytest
    
    from setuptools import setup
    
    setup()