Skip to content

fix support for easy_install's find-links option in setup.cfg #1921

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/1921.change.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix support for easy_install's ``find-links`` option in ``setup.cfg``.
13 changes: 11 additions & 2 deletions setuptools/installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,20 @@

import pkg_resources
from setuptools.command.easy_install import easy_install
from setuptools.extern import six
from setuptools.wheel import Wheel

from .py31compat import TemporaryDirectory


def _fixup_find_links(find_links):
"""Ensure find-links option end-up being a list of strings."""
if isinstance(find_links, six.string_types):
return find_links.split()
assert isinstance(find_links, (tuple, list))
return find_links


def _legacy_fetch_build_egg(dist, req):
"""Fetch an egg needed for building.

Expand All @@ -31,7 +40,7 @@ def _legacy_fetch_build_egg(dist, req):
if dist.dependency_links:
links = dist.dependency_links[:]
if 'find_links' in opts:
links = opts['find_links'][1] + links
links = _fixup_find_links(opts['find_links'][1]) + links
opts['find_links'] = ('setup', links)
install_dir = dist.get_egg_cache_dir()
cmd = easy_install(
Expand Down Expand Up @@ -84,7 +93,7 @@ def fetch_build_egg(dist, req):
else:
index_url = None
if 'find_links' in opts:
find_links = opts['find_links'][1][:]
find_links = _fixup_find_links(opts['find_links'][1])[:]
else:
find_links = []
if dist.dependency_links:
Expand Down
38 changes: 38 additions & 0 deletions setuptools/tests/test_easy_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,44 @@ def test_setup_requires_with_python_requires(self, monkeypatch, tmpdir):
eggs = list(map(str, pkg_resources.find_distributions(os.path.join(test_pkg, '.eggs'))))
assert eggs == ['dep 1.0']

@pytest.mark.parametrize('use_legacy_installer,with_dependency_links_in_setup_py',
itertools.product((False, True), (False, True)))
def test_setup_requires_with_find_links_in_setup_cfg(self, monkeypatch,
use_legacy_installer,
with_dependency_links_in_setup_py):
monkeypatch.setenv(str('PIP_RETRIES'), str('0'))
monkeypatch.setenv(str('PIP_TIMEOUT'), str('0'))
with contexts.save_pkg_resources_state():
with contexts.tempdir() as temp_dir:
make_trivial_sdist(os.path.join(temp_dir, 'python-xlib-42.tar.gz'), 'python-xlib', '42')
test_pkg = os.path.join(temp_dir, 'test_pkg')
test_setup_py = os.path.join(test_pkg, 'setup.py')
test_setup_cfg = os.path.join(test_pkg, 'setup.cfg')
os.mkdir(test_pkg)
with open(test_setup_py, 'w') as fp:
if with_dependency_links_in_setup_py:
dependency_links = [os.path.join(temp_dir, 'links')]
else:
dependency_links = []
fp.write(DALS(
'''
from setuptools import installer, setup
if {use_legacy_installer}:
installer.fetch_build_egg = installer._legacy_fetch_build_egg
setup(setup_requires='python-xlib==42',
dependency_links={dependency_links!r})
''').format(use_legacy_installer=use_legacy_installer,
dependency_links=dependency_links))
with open(test_setup_cfg, 'w') as fp:
fp.write(DALS(
'''
[easy_install]
index_url = {index_url}
find_links = {find_links}
''').format(index_url=os.path.join(temp_dir, 'index'),
find_links=temp_dir))
run_setup(test_setup_py, [str('--version')])

def test_setup_requires_with_transitive_extra_dependency(self, monkeypatch):
# Use case: installing a package with a build dependency on
# an already installed `dep[extra]`, which in turn depends
Expand Down