1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00

add support for global distutils options

This commit is contained in:
Ronny Pfannschmidt 2010-05-30 14:39:11 +02:00
parent d06c98dc6f
commit d8b00e253b
3 changed files with 36 additions and 7 deletions

View file

@ -123,6 +123,14 @@ class InstallCommand(Command):
"Use multiple --install-option options to pass multiple options to setup.py install. " "Use multiple --install-option options to pass multiple options to setup.py install. "
"If you are using an option with a directory path, be sure to use absolute path.") "If you are using an option with a directory path, be sure to use absolute path.")
self.parser.add_option(
'--global-option',
dest='global_options',
action='append',
help="Extra global options to be supplied to the setup.py"
"call before the install command"
)
def run(self, options, args): def run(self, options, args):
if not options.build_dir: if not options.build_dir:
options.build_dir = build_prefix options.build_dir = build_prefix
@ -134,6 +142,7 @@ class InstallCommand(Command):
options.build_dir = os.path.abspath(options.build_dir) options.build_dir = os.path.abspath(options.build_dir)
options.src_dir = os.path.abspath(options.src_dir) options.src_dir = os.path.abspath(options.src_dir)
install_options = options.install_options or [] install_options = options.install_options or []
global_options = options.global_options or []
index_urls = [options.index_url] + options.extra_index_urls index_urls = [options.index_url] + options.extra_index_urls
if options.no_index: if options.no_index:
logger.notify('Ignoring indexes: %s' % ','.join(index_urls)) logger.notify('Ignoring indexes: %s' % ','.join(index_urls))
@ -163,7 +172,7 @@ class InstallCommand(Command):
else: else:
requirement_set.locate_files() requirement_set.locate_files()
if not options.no_install and not self.bundle: if not options.no_install and not self.bundle:
requirement_set.install(install_options) requirement_set.install(install_options, global_options)
installed = ' '.join([req.name for req in installed = ' '.join([req.name for req in
requirement_set.successfully_installed]) requirement_set.successfully_installed])
if installed: if installed:

View file

@ -517,7 +517,7 @@ execfile(__file__)
name = name.replace(os.path.sep, '/') name = name.replace(os.path.sep, '/')
return name return name
def install(self, install_options): def install(self, install_options, global_options=()):
if self.editable: if self.editable:
self.install_editable() self.install_editable()
return return
@ -525,9 +525,14 @@ execfile(__file__)
record_filename = os.path.join(temp_location, 'install-record.txt') record_filename = os.path.join(temp_location, 'install-record.txt')
try: try:
install_args = [sys.executable, '-c', install_args = [
"import setuptools; __file__=%r; execfile(%r)" % (self.setup_py, self.setup_py), sys.executable, '-c',
'install', '--single-version-externally-managed', '--record', record_filename] "import setuptools;__file__=%r;execfile(__file__)" % self.setup_py
] + list(global_options) + [
'install',
'--single-version-externally-managed',
'--record', record_filename,
]
if in_venv(): if in_venv():
## FIXME: I'm not sure if this is a reasonable location; probably not ## FIXME: I'm not sure if this is a reasonable location; probably not
@ -542,6 +547,9 @@ execfile(__file__)
cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False) cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
finally: finally:
logger.indent -= 2 logger.indent -= 2
if not os.path.exists(record_filename):
logger.notify('Record file %s not found' % record_filename)
return
self.install_succeeded = True self.install_succeeded = True
f = open(record_filename) f = open(record_filename)
for line in f: for line in f:
@ -1224,7 +1232,7 @@ class RequirementSet(object):
finally: finally:
tar.close() tar.close()
def install(self, install_options): def install(self, install_options, global_options=()):
"""Install everything in this set (after having downloaded and unpacked the packages)""" """Install everything in this set (after having downloaded and unpacked the packages)"""
to_install = sorted([r for r in self.requirements.values() to_install = sorted([r for r in self.requirements.values()
if self.upgrade or not r.satisfied_by], if self.upgrade or not r.satisfied_by],
@ -1243,7 +1251,7 @@ class RequirementSet(object):
finally: finally:
logger.indent -= 2 logger.indent -= 2
try: try:
requirement.install(install_options) requirement.install(install_options, global_options)
except: except:
# if install did not succeed, rollback previous uninstall # if install did not succeed, rollback previous uninstall
if requirement.conflicts_with and not requirement.install_succeeded: if requirement.conflicts_with and not requirement.install_succeeded:

View file

@ -250,3 +250,15 @@ def test_install_pardir():
result = run_pip('install', pardir, cwd=run_from, expect_error=False) result = run_pip('install', pardir, cwd=run_from, expect_error=False)
assert (env.site_packages/'fspkg') in result.files_created, str(result.stdout) assert (env.site_packages/'fspkg') in result.files_created, str(result.stdout)
assert (env.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion) in result.files_created, str(result) assert (env.site_packages/'FSPkg-0.1dev-py%s.egg-info' % pyversion) in result.files_created, str(result)
def test_install_global_option():
"""
test using global distutils options.
in particular those that disable the actual install action\
"""
reset_env()
result = run_pip('install', '--global-option=--version', "INITools==0.1")
assert '0.1\n' in result.stdout