mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
merge heads
This commit is contained in:
commit
49aaad3c47
7 changed files with 35 additions and 9 deletions
|
@ -13,7 +13,7 @@ import errno
|
||||||
import shutil
|
import shutil
|
||||||
import logging
|
import logging
|
||||||
import tempfile
|
import tempfile
|
||||||
from sysconfig import get_config_var, get_path
|
from sysconfig import get_config_var, get_path, is_python_build
|
||||||
|
|
||||||
from packaging import logger
|
from packaging import logger
|
||||||
from packaging.dist import Distribution
|
from packaging.dist import Distribution
|
||||||
|
@ -488,20 +488,31 @@ def install(project):
|
||||||
|
|
||||||
Returns True on success, False on failure
|
Returns True on success, False on failure
|
||||||
"""
|
"""
|
||||||
|
if is_python_build():
|
||||||
|
# Python would try to install into the site-packages directory under
|
||||||
|
# $PREFIX, but when running from an uninstalled code checkout we don't
|
||||||
|
# want to create directories under the installation root
|
||||||
|
message = ('installing third-party projects from an uninstalled '
|
||||||
|
'Python is not supported')
|
||||||
|
logger.error(message)
|
||||||
|
return False
|
||||||
|
|
||||||
logger.info('Checking the installation location...')
|
logger.info('Checking the installation location...')
|
||||||
purelib_path = get_path('purelib')
|
purelib_path = get_path('purelib')
|
||||||
|
|
||||||
# trying to write a file there
|
# trying to write a file there
|
||||||
try:
|
try:
|
||||||
with tempfile.NamedTemporaryFile(suffix=project,
|
with tempfile.NamedTemporaryFile(suffix=project,
|
||||||
dir=purelib_path) as testfile:
|
dir=purelib_path) as testfile:
|
||||||
testfile.write(b'test')
|
testfile.write(b'test')
|
||||||
except OSError:
|
except OSError:
|
||||||
# was unable to write a file
|
# FIXME this should check the errno, or be removed altogether (race
|
||||||
|
# condition: the directory permissions could be changed between here
|
||||||
|
# and the actual install)
|
||||||
logger.info('Unable to write in "%s". Do you have the permissions ?'
|
logger.info('Unable to write in "%s". Do you have the permissions ?'
|
||||||
% purelib_path)
|
% purelib_path)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
logger.info('Getting information about %r...', project)
|
logger.info('Getting information about %r...', project)
|
||||||
try:
|
try:
|
||||||
info = get_infos(project)
|
info = get_infos(project)
|
||||||
|
@ -520,7 +531,7 @@ def install(project):
|
||||||
|
|
||||||
except InstallationConflict as e:
|
except InstallationConflict as e:
|
||||||
if logger.isEnabledFor(logging.INFO):
|
if logger.isEnabledFor(logging.INFO):
|
||||||
projects = ['%s %s' % (p.name, p.version) for p in e.args[0]]
|
projects = ['%r %s' % (p.name, p.version) for p in e.args[0]]
|
||||||
logger.info('%r conflicts with %s', project, ','.join(projects))
|
logger.info('%r conflicts with %s', project, ','.join(projects))
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -162,7 +162,7 @@ class InstallDistinfoTestCase(support.TempdirManager,
|
||||||
|
|
||||||
expected = []
|
expected = []
|
||||||
for f in install.get_outputs():
|
for f in install.get_outputs():
|
||||||
if (f.endswith('.pyc') or f == os.path.join(
|
if (f.endswith(('.pyc', '.pyo')) or f == os.path.join(
|
||||||
install_dir, 'foo-1.0.dist-info', 'RECORD')):
|
install_dir, 'foo-1.0.dist-info', 'RECORD')):
|
||||||
expected.append([f, '', ''])
|
expected.append([f, '', ''])
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -35,7 +35,7 @@ class DistributionTestCase(support.TempdirManager,
|
||||||
support.EnvironRestorer,
|
support.EnvironRestorer,
|
||||||
unittest.TestCase):
|
unittest.TestCase):
|
||||||
|
|
||||||
restore_environ = ['HOME']
|
restore_environ = ['HOME', 'PLAT']
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(DistributionTestCase, self).setUp()
|
super(DistributionTestCase, self).setUp()
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
"""Tests for the packaging.install module."""
|
"""Tests for the packaging.install module."""
|
||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
|
from sysconfig import is_python_build
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
|
|
||||||
from packaging import install
|
from packaging import install
|
||||||
|
@ -357,9 +359,17 @@ class TestInstall(LoggingCatcher, TempdirManager, unittest.TestCase):
|
||||||
install._install_dist = old_install_dist
|
install._install_dist = old_install_dist
|
||||||
|
|
||||||
def test_install_permission_denied(self):
|
def test_install_permission_denied(self):
|
||||||
# if we don't have the access to the installation
|
# if we don't have access to the installation path, we should abort
|
||||||
# path, we should abort immediatly
|
# immediately
|
||||||
project = os.path.join(os.path.dirname(__file__), 'package.tgz')
|
project = os.path.join(os.path.dirname(__file__), 'package.tgz')
|
||||||
|
|
||||||
|
# when running from an uninstalled build, a warning is emitted and the
|
||||||
|
# installation is not attempted
|
||||||
|
if is_python_build():
|
||||||
|
self.assertFalse(install.install(project))
|
||||||
|
self.assertEqual(1, len(self.get_logs(logging.ERROR)))
|
||||||
|
return
|
||||||
|
|
||||||
install_path = self.mkdtemp()
|
install_path = self.mkdtemp()
|
||||||
old_get_path = install.get_path
|
old_get_path = install.get_path
|
||||||
install.get_path = lambda path: install_path
|
install.get_path = lambda path: install_path
|
||||||
|
|
|
@ -950,7 +950,7 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR)
|
||||||
else true; \
|
else true; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
@for i in $(srcdir)/Lib/*.py $(srcdir)/Lib/*.egg-info $(srcdir)/Lib/*.cfg ; \
|
@for i in $(srcdir)/Lib/*.py $(srcdir)/Lib/*.cfg ; \
|
||||||
do \
|
do \
|
||||||
if test -x $$i; then \
|
if test -x $$i; then \
|
||||||
$(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \
|
$(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \
|
||||||
|
|
|
@ -550,6 +550,7 @@ Joerg Lehmann
|
||||||
Robert Lehmann
|
Robert Lehmann
|
||||||
Petri Lehtinen
|
Petri Lehtinen
|
||||||
Luke Kenneth Casson Leighton
|
Luke Kenneth Casson Leighton
|
||||||
|
Tshepang Lekhonkhobe
|
||||||
Marc-Andre Lemburg
|
Marc-Andre Lemburg
|
||||||
John Lenton
|
John Lenton
|
||||||
Christopher Tur Lesniewski-Laas
|
Christopher Tur Lesniewski-Laas
|
||||||
|
|
|
@ -189,6 +189,10 @@ Library
|
||||||
|
|
||||||
- Issue #12009: Fixed regression in netrc file comment handling.
|
- Issue #12009: Fixed regression in netrc file comment handling.
|
||||||
|
|
||||||
|
- Issue #12246: Warn and fail when trying to install a third-party project from
|
||||||
|
an uninstalled Python (built in a source checkout). Original patch by
|
||||||
|
Tshepang Lekhonkhobe.
|
||||||
|
|
||||||
- Issue #10694: zipfile now ignores garbage at the end of a zipfile.
|
- Issue #10694: zipfile now ignores garbage at the end of a zipfile.
|
||||||
|
|
||||||
- Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA.
|
- Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue