Skip to content

Commit fe09baa

Browse files
committed
don't install or build wheels for distribute in python3
1 parent 3e7c94e commit fe09baa

File tree

6 files changed

+63
-12
lines changed

6 files changed

+63
-12
lines changed

pip/backwardcompat/__init__.py

+8
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ def fwrite(f, s):
6161
def get_http_message_param(http_message, param, default_value):
6262
return http_message.get_param(param, default_value)
6363

64+
install_skip_reqs = {
65+
'distribute' : 'Can not install distribute due to bootstrap issues'
66+
}
67+
wheel_skip_reqs = {
68+
'distribute' : 'Can not build wheels for distribute due to bootstrap issues'
69+
}
6470
bytes = bytes
6571
string_types = (str,)
6672
raw_input = input
@@ -93,6 +99,8 @@ def get_http_message_param(http_message, param, default_value):
9399
result = http_message.getparam(param)
94100
return result or default_value
95101

102+
install_skip_reqs = {}
103+
wheel_skip_reqs = {}
96104
bytes = str
97105
string_types = (basestring,)
98106
reduce = reduce

pip/commands/install.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pip.req import InstallRequirement, RequirementSet, parse_requirements
66
from pip.log import logger
77
from pip.locations import src_prefix, virtualenv_no_global, distutils_scheme
8+
from pip.backwardcompat import install_skip_reqs
89
from pip.basecommand import Command
910
from pip.index import PackageFinder
1011
from pip.exceptions import InstallationError, CommandError
@@ -207,7 +208,8 @@ def run(self, options, args):
207208
ignore_dependencies=options.ignore_dependencies,
208209
force_reinstall=options.force_reinstall,
209210
use_user_site=options.use_user_site,
210-
target_dir=temp_target_dir)
211+
target_dir=temp_target_dir,
212+
skip_reqs=install_skip_reqs)
211213
for name in args:
212214
requirement_set.add_requirement(
213215
InstallRequirement.from_line(name, None, prereleases=options.pre))

pip/commands/wheel.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pip.basecommand import Command
77
from pip.index import PackageFinder
88
from pip.log import logger
9+
from pip.backwardcompat import wheel_skip_reqs
910
from pip.exceptions import CommandError
1011
from pip.req import InstallRequirement, RequirementSet, parse_requirements
1112
from pip.util import normalize_path
@@ -107,7 +108,8 @@ def run(self, options, args):
107108
download_dir=None,
108109
download_cache=options.download_cache,
109110
ignore_dependencies=options.ignore_dependencies,
110-
ignore_installed=True)
111+
ignore_installed=True,
112+
skip_reqs=wheel_skip_reqs)
111113

112114
#parse args and/or requirements files
113115
for name in args:

pip/req.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,8 @@ class RequirementSet(object):
842842

843843
def __init__(self, build_dir, src_dir, download_dir, download_cache=None,
844844
upgrade=False, ignore_installed=False, as_egg=False, target_dir=None,
845-
ignore_dependencies=False, force_reinstall=False, use_user_site=False):
845+
ignore_dependencies=False, force_reinstall=False, use_user_site=False,
846+
skip_reqs={}):
846847
self.build_dir = build_dir
847848
self.src_dir = src_dir
848849
self.download_dir = download_dir
@@ -860,7 +861,10 @@ def __init__(self, build_dir, src_dir, download_dir, download_cache=None,
860861
self.reqs_to_cleanup = []
861862
self.as_egg = as_egg
862863
self.use_user_site = use_user_site
863-
self.target_dir = target_dir #set from --target option
864+
# Set from --target option
865+
self.target_dir = target_dir
866+
# Requirements (by project name) to be skipped
867+
self.skip_reqs = skip_reqs
864868

865869
def __str__(self):
866870
reqs = [req for req in self.requirements.values()
@@ -870,6 +874,9 @@ def __str__(self):
870874

871875
def add_requirement(self, install_req):
872876
name = install_req.name
877+
if name and name.lower() in self.skip_reqs:
878+
logger.notify("Skipping %s: %s" %( name, self.skip_reqs[name.lower()]))
879+
return False
873880
install_req.as_egg = self.as_egg
874881
install_req.use_user_site = self.use_user_site
875882
install_req.target_dir = self.target_dir
@@ -885,6 +892,7 @@ def add_requirement(self, install_req):
885892
## FIXME: what about other normalizations? E.g., _ vs. -?
886893
if name.lower() != name:
887894
self.requirement_aliases[name.lower()] = name
895+
return True
888896

889897
def has_requirement(self, project_name):
890898
for name in project_name, project_name.lower():
@@ -1090,8 +1098,8 @@ def prepare_files(self, finder, force_root_egg_info=False, bundle=False):
10901098
if is_bundle:
10911099
req_to_install.move_bundle_files(self.build_dir, self.src_dir)
10921100
for subreq in req_to_install.bundle_requirements():
1093-
reqs.append(subreq)
1094-
self.add_requirement(subreq)
1101+
if self.add_requirement(subreq):
1102+
reqs.append(subreq)
10951103
elif is_wheel:
10961104
req_to_install.source_dir = location
10971105
req_to_install.url = url.url
@@ -1105,8 +1113,8 @@ def prepare_files(self, finder, force_root_egg_info=False, bundle=False):
11051113
continue
11061114
subreq = InstallRequirement(str(subreq),
11071115
req_to_install)
1108-
reqs.append(subreq)
1109-
self.add_requirement(subreq)
1116+
if self.add_requirement(subreq):
1117+
reqs.append(subreq)
11101118
elif self.is_download:
11111119
req_to_install.source_dir = location
11121120
req_to_install.run_egg_info()
@@ -1153,8 +1161,8 @@ def prepare_files(self, finder, force_root_egg_info=False, bundle=False):
11531161
## FIXME: check for conflict
11541162
continue
11551163
subreq = InstallRequirement(req, req_to_install)
1156-
reqs.append(subreq)
1157-
self.add_requirement(subreq)
1164+
if self.add_requirement(subreq):
1165+
reqs.append(subreq)
11581166
if not self.has_requirement(req_to_install.name):
11591167
#'unnamed' requirements will get added here
11601168
self.add_requirement(req_to_install)

tests/test_basic.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from os.path import abspath, join, curdir, pardir
77

88
from nose.tools import assert_raises
9+
from nose import SkipTest
910
from mock import patch
1011

1112
from pip.util import rmtree, find_command
@@ -348,7 +349,6 @@ def test_install_from_wheel_with_extras():
348349
"""
349350
Test installing from a wheel.
350351
"""
351-
from nose import SkipTest
352352
try:
353353
import ast
354354
except ImportError:
@@ -650,3 +650,14 @@ def test_find_command_trys_supplied_pathext(mock_isfile, getpath_mock):
650650
assert mock_isfile.call_args_list == expected, "Actual: %s\nExpected %s" % (mock_isfile.call_args_list, expected)
651651
assert not getpath_mock.called, "Should not call get_pathext"
652652

653+
654+
def test_dont_install_distribute_in_py3():
655+
"""
656+
Test we skip distribute in py3
657+
"""
658+
if sys.version_info < (3, 0):
659+
raise SkipTest()
660+
env = reset_env()
661+
result = run_pip('install', 'distribute')
662+
assert "Skipping distribute: Can not install distribute due to bootstrap issues" in result.stdout
663+
assert not result.files_updated

tests/test_req.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ def teardown(self):
2323
logger.consumers = []
2424
shutil.rmtree(self.tempdir, ignore_errors=True)
2525

26-
def basic_reqset(self):
26+
def basic_reqset(self, skip_reqs={}):
2727
return RequirementSet(
2828
build_dir=os.path.join(self.tempdir, 'build'),
2929
src_dir=os.path.join(self.tempdir, 'src'),
3030
download_dir=None,
3131
download_cache=os.path.join(self.tempdir, 'download_cache'),
32+
skip_reqs=skip_reqs
3233
)
3334

3435
def test_no_reuse_existing_build_dir(self):
@@ -48,3 +49,22 @@ def test_no_reuse_existing_build_dir(self):
4849
finder
4950
)
5051

52+
def test_skip_reqs(self):
53+
"""Test the skip_reqs list works"""
54+
55+
reqset = self.basic_reqset(skip_reqs={'simple':''})
56+
req = InstallRequirement.from_line('simple')
57+
reqset.add_requirement(req)
58+
assert not reqset.has_requirements
59+
finder = PackageFinder([find_links], [])
60+
reqset.prepare_files(finder)
61+
assert not reqset.has_requirements
62+
63+
def test_add_requirement_returns_true_false(self):
64+
"""Test add_requirement returns true of false"""
65+
66+
req = InstallRequirement.from_line('simple')
67+
reqset = self.basic_reqset()
68+
assert True == reqset.add_requirement(req)
69+
reqset = self.basic_reqset(skip_reqs={'simple':''})
70+
assert False == reqset.add_requirement(req)

0 commit comments

Comments
 (0)