ERROR pip install_error ai_generated partial

ERROR: Cannot install package-a 1.0 and package-b 2.0 because these package versions have conflicting dependencies. The conflict is caused by: package-a 1.0 depends on package-c>=3.0; python_version < '3.9' and package-b 2.0 depends on package-c<3.0; python_version >= '3.9'

ID: pip/dependency-conflict-with-marker

Also available as: JSON · Markdown · 中文
80%Fix Rate
87%Confidence
1Evidence
2024-05-22First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
pip 23.3 active
pip 24.0 active
pip 24.1 active

Root Cause

Pip's resolver detects a dependency conflict between two packages due to environment markers (e.g., python_version) that create mutually exclusive version requirements for a shared dependency, making resolution impossible for the current Python version.

generic

中文

pip 的解析器检测到两个包之间由于环境标记(如 python_version)导致的依赖冲突,这些标记对共享依赖形成了互斥的版本要求,使得在当前 Python 版本下无法解析。

Official Documentation

https://pip.pypa.io/en/stable/topics/dependency-resolution/#dependency-conflicts

Workarounds

  1. 85% success Install a version of package-a or package-b that does not trigger the marker conflict: pip install 'package-a<1.0' 'package-b==2.0' (adjust versions based on resolver output).
    Install a version of package-a or package-b that does not trigger the marker conflict: pip install 'package-a<1.0' 'package-b==2.0' (adjust versions based on resolver output).
  2. 80% success Use a different Python version that satisfies one of the marker conditions: pyenv install 3.8 && pyenv local 3.8 && pip install package-a package-b
    Use a different Python version that satisfies one of the marker conditions: pyenv install 3.8 && pyenv local 3.8 && pip install package-a package-b
  3. 70% success Pin package-c to a version that satisfies both markers (if possible): pip install 'package-c>=3.0,<3.0' (note: this may not exist; otherwise use a range that works for both).
    Pin package-c to a version that satisfies both markers (if possible): pip install 'package-c>=3.0,<3.0' (note: this may not exist; otherwise use a range that works for both).

中文步骤

  1. Install a version of package-a or package-b that does not trigger the marker conflict: pip install 'package-a<1.0' 'package-b==2.0' (adjust versions based on resolver output).
  2. Use a different Python version that satisfies one of the marker conditions: pyenv install 3.8 && pyenv local 3.8 && pip install package-a package-b
  3. Pin package-c to a version that satisfies both markers (if possible): pip install 'package-c>=3.0,<3.0' (note: this may not exist; otherwise use a range that works for both).

Dead Ends

Common approaches that don't work:

  1. 95% fail

    Using pip install --upgrade --force-reinstall does not resolve the logical conflict; it only reinstalls packages without changing version constraints.

  2. 98% fail

    Setting PIP_REQUIRE_VIRTUALENV has no effect on dependency resolution logic.

  3. 85% fail

    Running pip install --no-deps package-a package-b installs both without dependencies but leaves them broken at runtime due to missing or wrong versions of package-c.