Skip to content

Transitive dependencies in setup_requires should be able to override system versions #1124

@sitaktif

Description

@sitaktif

This is basically the same issue as #223 but for transitive dependencies.

Issue:

When a package my_pkg depends (with install_requires) on my_transitive_dep with a version that conflict with the currently installed version of my_transitive_dep, adding my_pkg as a setup_requires to the setup.py of a project fails to initialise the Distribution object and raises pkg_resources.VersionConflict.

Expected behaviour:

The proper version of my_transitive_dep is installed in .eggs and the currently installed version of my_transitive_dep is ignored.

Minimal steps to reproduce the issue:

(in a virtualenv, python 2.7.13)

setuptools-versionconflict $ pip install 'setuptools<30'
Collecting setuptools<30
  Using cached https://pypi.apple.com/packages/06/4b/86a670fd21f7849adb092e40883c48dcd0d66b8a878fc8d63b7f0ea04213/setuptools-29.0.1-py2.py3-none-any.whl
Installing collected packages: setuptools
Successfully installed setuptools-29.0.1

setuptools-versionconflict $ cat setup.py
from setuptools import setup

setup(
    name='my-test',
    setup_requires=['flake8']  # flake8 has `setuptools>=30` in its `install_requires`
)

setuptools-versionconflict $ python setup.py clean
zip_safe flag not set; analyzing archive contents...

Installed /private/var/folders/cg/b7r4x8m15p59z4glfsy6s_640000gn/T/easy_install-q7dnDn/flake8-3.4.1/.eggs/pytest_runner-2.11.1-py2.7.egg
warning: no previously-included files matching '*.pyc' found anywhere in distribution
no previously-included directories found matching 'docs/build/'
zip_safe flag not set; analyzing archive contents...

Installed /Users/rchossart/tmp/setuptools-versionconflict/.eggs/flake8-3.4.1-py2.7.egg
Traceback (most recent call last):
  File "setup.py", line 5, in <module>
    setup_requires=['flake8']
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 111, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 850, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1115, in best_match
    dist = working_set.find(req)
  File "/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 719, in find
    raise VersionConflict(dist, req)
pkg_resources.VersionConflict: (setuptools 29.0.1 (/Users/rchossart/tmp/setuptools-versionconflict/.venv/lib/python2.7/site-packages), Requirement.parse('setuptools>=30'))

EDIT: clarified the problem definition.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions