summaryrefslogtreecommitdiffstats
path: root/Lib/packaging
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2011-09-17 01:31:51 (GMT)
committerÉric Araujo <merwok@netwok.org>2011-09-17 01:31:51 (GMT)
commit7724a6c10c56a1b14b4933de368e672eae840f47 (patch)
tree1b3bd60ab9b79bd018cbc942a8e12140b2e18576 /Lib/packaging
parent37ccd6f794539e0678b7a7ad938e571cc73e106c (diff)
downloadcpython-7724a6c10c56a1b14b4933de368e672eae840f47.zip
cpython-7724a6c10c56a1b14b4933de368e672eae840f47.tar.gz
cpython-7724a6c10c56a1b14b4933de368e672eae840f47.tar.bz2
Packaging cleanup: remove conditionals for < 2.6 support.
PEP 370 features and sys.dont_write_bytecode are always available in 3.3; the distutils2 backport still has the conditionals. I also renamed an internal misnamed method and fixed a few things (“packaging2” name, stray print, unused import, fd leak).
Diffstat (limited to 'Lib/packaging')
-rw-r--r--Lib/packaging/command/build_ext.py17
-rw-r--r--Lib/packaging/command/build_py.py2
-rw-r--r--Lib/packaging/command/install_dist.py59
-rw-r--r--Lib/packaging/command/install_distinfo.py7
-rw-r--r--Lib/packaging/command/install_lib.py2
-rw-r--r--Lib/packaging/compiler/bcppcompiler.py1
-rw-r--r--Lib/packaging/compiler/ccompiler.py1
-rw-r--r--Lib/packaging/compiler/unixccompiler.py2
-rw-r--r--Lib/packaging/dist.py4
-rw-r--r--Lib/packaging/tests/test_command_build_ext.py8
-rw-r--r--Lib/packaging/tests/test_command_build_py.py2
-rw-r--r--Lib/packaging/tests/test_command_install_dist.py12
-rw-r--r--Lib/packaging/tests/test_command_install_lib.py11
-rw-r--r--Lib/packaging/tests/test_mixin2to3.py3
-rw-r--r--Lib/packaging/tests/test_util.py4
-rw-r--r--Lib/packaging/util.py6
16 files changed, 46 insertions, 95 deletions
diff --git a/Lib/packaging/command/build_ext.py b/Lib/packaging/command/build_ext.py
index 2bffae3..4051a2d 100644
--- a/Lib/packaging/command/build_ext.py
+++ b/Lib/packaging/command/build_ext.py
@@ -3,6 +3,7 @@
import os
import re
import sys
+import site
import logging
import sysconfig
@@ -15,9 +16,6 @@ from packaging.util import newer_group
from packaging.compiler.extension import Extension
from packaging import logger
-import site
-HAS_USER_SITE = True
-
if os.name == 'nt':
from packaging.compiler.msvccompiler import get_build_version
MSVC_VERSION = int(get_build_version())
@@ -62,6 +60,8 @@ class build_ext(Command):
('inplace', 'i',
"ignore build-lib and put compiled extensions into the source " +
"directory alongside your pure Python modules"),
+ ('user', None,
+ "add user include, library and rpath"),
('include-dirs=', 'I',
"list of directories to search for header files" + sep_by),
('define=', 'D',
@@ -88,12 +88,8 @@ class build_ext(Command):
"path to the SWIG executable"),
]
- boolean_options = ['inplace', 'debug', 'force']
+ boolean_options = ['inplace', 'debug', 'force', 'user']
- if HAS_USER_SITE:
- user_options.append(('user', None,
- "add user include, library and rpath"))
- boolean_options.append('user')
help_options = [
('help-compiler', None,
@@ -120,8 +116,7 @@ class build_ext(Command):
self.compiler = None
self.swig = None
self.swig_opts = None
- if HAS_USER_SITE:
- self.user = None
+ self.user = None
def finalize_options(self):
self.set_undefined_options('build',
@@ -270,7 +265,7 @@ class build_ext(Command):
self.swig_opts = self.swig_opts.split(' ')
# Finally add the user include and library directories if requested
- if HAS_USER_SITE and self.user:
+ if self.user:
user_include = os.path.join(site.USER_BASE, "include")
user_lib = os.path.join(site.USER_BASE, "lib")
if os.path.isdir(user_include):
diff --git a/Lib/packaging/command/build_py.py b/Lib/packaging/command/build_py.py
index 7baa6e4..0eafffa 100644
--- a/Lib/packaging/command/build_py.py
+++ b/Lib/packaging/command/build_py.py
@@ -388,7 +388,7 @@ class build_py(Command, Mixin2to3):
self.build_module(module, module_file, package)
def byte_compile(self, files):
- if hasattr(sys, 'dont_write_bytecode') and sys.dont_write_bytecode:
+ if sys.dont_write_bytecode:
logger.warning('%s: byte-compiling is disabled, skipping.',
self.get_command_name())
return
diff --git a/Lib/packaging/command/install_dist.py b/Lib/packaging/command/install_dist.py
index dfe6df2..4fbca7e 100644
--- a/Lib/packaging/command/install_dist.py
+++ b/Lib/packaging/command/install_dist.py
@@ -14,9 +14,6 @@ from packaging.util import convert_path, change_root, get_platform
from packaging.errors import PackagingOptionError
-HAS_USER_SITE = True
-
-
class install_dist(Command):
description = "install everything from build directory"
@@ -27,6 +24,9 @@ class install_dist(Command):
"installation prefix"),
('exec-prefix=', None,
"(Unix only) prefix for platform-specific files"),
+ ('user', None,
+ "install in user site-packages directory [%s]" %
+ get_path('purelib', '%s_user' % os.name)),
('home=', None,
"(Unix only) home directory to install under"),
@@ -97,15 +97,7 @@ class install_dist(Command):
]
boolean_options = ['compile', 'force', 'skip-build', 'no-distinfo',
- 'requested', 'no-record']
-
- if HAS_USER_SITE:
- user_options.append(
- ('user', None,
- "install in user site-packages directory [%s]" %
- get_path('purelib', '%s_user' % os.name)))
-
- boolean_options.append('user')
+ 'requested', 'no-record', 'user']
negative_opt = {'no-compile': 'compile', 'no-requested': 'requested'}
@@ -115,8 +107,7 @@ class install_dist(Command):
self.prefix = None
self.exec_prefix = None
self.home = None
- if HAS_USER_SITE:
- self.user = False
+ self.user = False
# These select only the installation base; it's up to the user to
# specify the installation scheme (currently, that means supplying
@@ -135,9 +126,8 @@ class install_dist(Command):
self.install_lib = None # set to either purelib or platlib
self.install_scripts = None
self.install_data = None
- if HAS_USER_SITE:
- self.install_userbase = get_config_var('userbase')
- self.install_usersite = get_path('purelib', '%s_user' % os.name)
+ self.install_userbase = get_config_var('userbase')
+ self.install_usersite = get_path('purelib', '%s_user' % os.name)
self.compile = None
self.optimize = None
@@ -219,9 +209,8 @@ class install_dist(Command):
raise PackagingOptionError(
"must supply either home or prefix/exec-prefix -- not both")
- if HAS_USER_SITE and self.user and (
- self.prefix or self.exec_prefix or self.home or
- self.install_base or self.install_platbase):
+ if self.user and (self.prefix or self.exec_prefix or self.home or
+ self.install_base or self.install_platbase):
raise PackagingOptionError(
"can't combine user with prefix/exec_prefix/home or "
"install_base/install_platbase")
@@ -274,11 +263,9 @@ class install_dist(Command):
'exec_prefix': exec_prefix,
'srcdir': srcdir,
'projectbase': projectbase,
- }
-
- if HAS_USER_SITE:
- self.config_vars['userbase'] = self.install_userbase
- self.config_vars['usersite'] = self.install_usersite
+ 'userbase': self.install_userbase,
+ 'usersite': self.install_usersite,
+ }
self.expand_basedirs()
@@ -295,9 +282,9 @@ class install_dist(Command):
self.dump_dirs("post-expand_dirs()")
- # Create directories in the home dir:
- if HAS_USER_SITE and self.user:
- self.create_home_path()
+ # Create directories under USERBASE
+ if self.user:
+ self.create_user_dirs()
# Pick the actual directory to install all modules to: either
# install_purelib or install_platlib, depending on whether this
@@ -311,10 +298,8 @@ class install_dist(Command):
# Convert directories from Unix /-separated syntax to the local
# convention.
- self.convert_paths('lib', 'purelib', 'platlib',
- 'scripts', 'data', 'headers')
- if HAS_USER_SITE:
- self.convert_paths('userbase', 'usersite')
+ self.convert_paths('lib', 'purelib', 'platlib', 'scripts',
+ 'data', 'headers', 'userbase', 'usersite')
# Well, we're not actually fully completely finalized yet: we still
# have to deal with 'extra_path', which is the hack for allowing
@@ -355,7 +340,7 @@ class install_dist(Command):
"installation scheme is incomplete")
return
- if HAS_USER_SITE and self.user:
+ if self.user:
if self.install_userbase is None:
raise PackagingPlatformError(
"user base directory is not specified")
@@ -383,7 +368,7 @@ class install_dist(Command):
def finalize_other(self):
"""Finalize options for non-posix platforms"""
- if HAS_USER_SITE and self.user:
+ if self.user:
if self.install_userbase is None:
raise PackagingPlatformError(
"user base directory is not specified")
@@ -494,10 +479,8 @@ class install_dist(Command):
attr = "install_" + name
setattr(self, attr, change_root(self.root, getattr(self, attr)))
- def create_home_path(self):
- """Create directories under ~."""
- if HAS_USER_SITE and not self.user:
- return
+ def create_user_dirs(self):
+ """Create directories under USERBASE as needed."""
home = convert_path(os.path.expanduser("~"))
for name, path in self.config_vars.items():
if path.startswith(home) and not os.path.isdir(path):
diff --git a/Lib/packaging/command/install_distinfo.py b/Lib/packaging/command/install_distinfo.py
index c1f85ed..e85aaf7 100644
--- a/Lib/packaging/command/install_distinfo.py
+++ b/Lib/packaging/command/install_distinfo.py
@@ -2,14 +2,13 @@
# Forked from the former install_egg_info command by Josip Djolonga
-import csv
import os
-import re
+import csv
import hashlib
+from shutil import rmtree
-from packaging.command.cmd import Command
from packaging import logger
-from shutil import rmtree
+from packaging.command.cmd import Command
class install_distinfo(Command):
diff --git a/Lib/packaging/command/install_lib.py b/Lib/packaging/command/install_lib.py
index 978f0ef..5e81b41 100644
--- a/Lib/packaging/command/install_lib.py
+++ b/Lib/packaging/command/install_lib.py
@@ -114,7 +114,7 @@ class install_lib(Command):
return outfiles
def byte_compile(self, files):
- if getattr(sys, 'dont_write_bytecode'):
+ if sys.dont_write_bytecode:
# XXX do we want this? because a Python runs without bytecode
# doesn't mean that the *dists should not contain bytecode
#--or does it?
diff --git a/Lib/packaging/compiler/bcppcompiler.py b/Lib/packaging/compiler/bcppcompiler.py
index 63b6d8b..477cf93 100644
--- a/Lib/packaging/compiler/bcppcompiler.py
+++ b/Lib/packaging/compiler/bcppcompiler.py
@@ -352,5 +352,4 @@ class BCPPCompiler(CCompiler) :
try:
self.spawn(pp_args)
except PackagingExecError as msg:
- print(msg)
raise CompileError(msg)
diff --git a/Lib/packaging/compiler/ccompiler.py b/Lib/packaging/compiler/ccompiler.py
index d274327..02e22d2 100644
--- a/Lib/packaging/compiler/ccompiler.py
+++ b/Lib/packaging/compiler/ccompiler.py
@@ -5,7 +5,6 @@ interface for the compiler abstraction model used by packaging.
"""
import os
-import sys
from shutil import move
from packaging import logger
from packaging.util import split_quoted, execute, newer_group, spawn
diff --git a/Lib/packaging/compiler/unixccompiler.py b/Lib/packaging/compiler/unixccompiler.py
index c857d03..3458faa 100644
--- a/Lib/packaging/compiler/unixccompiler.py
+++ b/Lib/packaging/compiler/unixccompiler.py
@@ -127,7 +127,7 @@ class UnixCCompiler(CCompiler):
executables['ranlib'] = ["ranlib"]
# Needed for the filename generation methods provided by the base
- # class, CCompiler. NB. whoever instantiates/uses a particular
+ # class, CCompiler. XXX whoever instantiates/uses a particular
# UnixCCompiler instance should set 'shared_lib_ext' -- we set a
# reasonable common default here, but it's not necessarily used on all
# Unices!
diff --git a/Lib/packaging/dist.py b/Lib/packaging/dist.py
index de718cc..3019b7c 100644
--- a/Lib/packaging/dist.py
+++ b/Lib/packaging/dist.py
@@ -537,7 +537,7 @@ Common commands: (see '--help-commands' for more)
def _get_command_groups(self):
"""Helper function to retrieve all the command class names divided
into standard commands (listed in
- packaging2.command.STANDARD_COMMANDS) and extra commands (given in
+ packaging.command.STANDARD_COMMANDS) and extra commands (given in
self.cmdclass and not standard commands).
"""
extra_commands = [cmd for cmd in self.cmdclass
@@ -547,7 +547,7 @@ Common commands: (see '--help-commands' for more)
def print_commands(self):
"""Print out a help message listing all available commands with a
description of each. The list is divided into standard commands
- (listed in packaging2.command.STANDARD_COMMANDS) and extra commands
+ (listed in packaging.command.STANDARD_COMMANDS) and extra commands
(given in self.cmdclass and not standard commands). The
descriptions come from the command class attribute
'description'.
diff --git a/Lib/packaging/tests/test_command_build_ext.py b/Lib/packaging/tests/test_command_build_ext.py
index 59d09bf..52dfa31 100644
--- a/Lib/packaging/tests/test_command_build_ext.py
+++ b/Lib/packaging/tests/test_command_build_ext.py
@@ -18,18 +18,13 @@ class BuildExtTestCase(support.TempdirManager,
support.LoggingCatcher,
unittest.TestCase):
def setUp(self):
- # Create a simple test environment
- # Note that we're making changes to sys.path
super(BuildExtTestCase, self).setUp()
self.tmp_dir = self.mkdtemp()
self.old_user_base = site.USER_BASE
site.USER_BASE = self.mkdtemp()
def tearDown(self):
- # Get everything back to normal
- if sys.version > "2.6":
- site.USER_BASE = self.old_user_base
-
+ site.USER_BASE = self.old_user_base
super(BuildExtTestCase, self).tearDown()
def test_build_ext(self):
@@ -94,7 +89,6 @@ class BuildExtTestCase(support.TempdirManager,
# make sure we get some library dirs under solaris
self.assertGreater(len(cmd.library_dirs), 0)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_user_site(self):
dist = Distribution({'name': 'xx'})
cmd = build_ext(dist)
diff --git a/Lib/packaging/tests/test_command_build_py.py b/Lib/packaging/tests/test_command_build_py.py
index 243a863..4eeb34e 100644
--- a/Lib/packaging/tests/test_command_build_py.py
+++ b/Lib/packaging/tests/test_command_build_py.py
@@ -99,8 +99,6 @@ class BuildPyTestCase(support.TempdirManager,
os.chdir(cwd)
sys.stdout = old_stdout
- @unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
- 'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
diff --git a/Lib/packaging/tests/test_command_install_dist.py b/Lib/packaging/tests/test_command_install_dist.py
index 8f90aff..808b568 100644
--- a/Lib/packaging/tests/test_command_install_dist.py
+++ b/Lib/packaging/tests/test_command_install_dist.py
@@ -72,7 +72,6 @@ class InstallTestCase(support.TempdirManager,
check_path(cmd.install_scripts, os.path.join(destination, "bin"))
check_path(cmd.install_data, destination)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_user_site(self):
# test install with --user
# preparing the environment for the test
@@ -173,12 +172,11 @@ class InstallTestCase(support.TempdirManager,
cmd.home = 'home'
self.assertRaises(PackagingOptionError, cmd.finalize_options)
- if sys.version >= '2.6':
- # can't combine user with with prefix/exec_prefix/home or
- # install_(plat)base
- cmd.prefix = None
- cmd.user = 'user'
- self.assertRaises(PackagingOptionError, cmd.finalize_options)
+ # can't combine user with with prefix/exec_prefix/home or
+ # install_(plat)base
+ cmd.prefix = None
+ cmd.user = 'user'
+ self.assertRaises(PackagingOptionError, cmd.finalize_options)
def test_old_record(self):
# test pre-PEP 376 --record option (outside dist-info dir)
diff --git a/Lib/packaging/tests/test_command_install_lib.py b/Lib/packaging/tests/test_command_install_lib.py
index b46f3bd..d36120b 100644
--- a/Lib/packaging/tests/test_command_install_lib.py
+++ b/Lib/packaging/tests/test_command_install_lib.py
@@ -7,13 +7,6 @@ from packaging.command.install_lib import install_lib
from packaging.compiler.extension import Extension
from packaging.errors import PackagingOptionError
-try:
- no_bytecode = sys.dont_write_bytecode
- bytecode_support = True
-except AttributeError:
- no_bytecode = False
- bytecode_support = False
-
class InstallLibTestCase(support.TempdirManager,
support.LoggingCatcher,
@@ -40,7 +33,7 @@ class InstallLibTestCase(support.TempdirManager,
cmd.finalize_options()
self.assertEqual(cmd.optimize, 2)
- @unittest.skipIf(no_bytecode, 'byte-compile not supported')
+ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile not supported')
def test_byte_compile(self):
pkg_dir, dist = self.create_dist()
cmd = install_lib(dist)
@@ -89,8 +82,6 @@ class InstallLibTestCase(support.TempdirManager,
# get_input should return 2 elements
self.assertEqual(len(cmd.get_inputs()), 2)
- @unittest.skipUnless(bytecode_support,
- 'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
diff --git a/Lib/packaging/tests/test_mixin2to3.py b/Lib/packaging/tests/test_mixin2to3.py
index 926f754..14a7487 100644
--- a/Lib/packaging/tests/test_mixin2to3.py
+++ b/Lib/packaging/tests/test_mixin2to3.py
@@ -9,7 +9,6 @@ class Mixin2to3TestCase(support.TempdirManager,
support.LoggingCatcher,
unittest.TestCase):
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_convert_code_only(self):
# used to check if code gets converted properly.
code = "print 'test'"
@@ -26,7 +25,6 @@ class Mixin2to3TestCase(support.TempdirManager,
self.assertEqual(expected, converted)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_doctests_only(self):
# used to check if doctests gets converted properly.
doctest = textwrap.dedent('''\
@@ -57,7 +55,6 @@ class Mixin2to3TestCase(support.TempdirManager,
self.assertEqual(expected, converted)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_additional_fixers(self):
# used to check if use_2to3_fixers works
code = 'type(x) is not T'
diff --git a/Lib/packaging/tests/test_util.py b/Lib/packaging/tests/test_util.py
index c3d91aa..2872458 100644
--- a/Lib/packaging/tests/test_util.py
+++ b/Lib/packaging/tests/test_util.py
@@ -319,8 +319,6 @@ class UtilTestCase(support.EnvironRestorer,
res = get_compiler_versions()
self.assertEqual(res[2], None)
- @unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
- 'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile raise a PackagingError
# if sys.dont_write_bytecode is True
@@ -407,7 +405,6 @@ class UtilTestCase(support.EnvironRestorer,
finally:
sys.path.remove(tmp_dir)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_run_2to3_on_code(self):
content = "print 'test'"
converted_content = "print('test')"
@@ -422,7 +419,6 @@ class UtilTestCase(support.EnvironRestorer,
file_handle.close()
self.assertEqual(new_content, converted_content)
- @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_run_2to3_on_doctests(self):
# to check if text files containing doctests only get converted.
content = ">>> print 'test'\ntest\n"
diff --git a/Lib/packaging/util.py b/Lib/packaging/util.py
index 49c5991..89f5389 100644
--- a/Lib/packaging/util.py
+++ b/Lib/packaging/util.py
@@ -326,7 +326,7 @@ def byte_compile(py_files, optimize=0, force=False, prefix=None,
"""
# nothing is done if sys.dont_write_bytecode is True
# FIXME this should not raise an error
- if hasattr(sys, 'dont_write_bytecode') and sys.dont_write_bytecode:
+ if sys.dont_write_bytecode:
raise PackagingByteCompileError('byte-compiling is disabled.')
# First, if the caller didn't force us into direct or indirect mode,
@@ -346,8 +346,10 @@ def byte_compile(py_files, optimize=0, force=False, prefix=None,
# run it with the appropriate flags.
if not direct:
from tempfile import mkstemp
- # XXX script_fd may leak, use something better than mkstemp
+ # XXX use something better than mkstemp
script_fd, script_name = mkstemp(".py")
+ os.close(script_fd)
+ script_fd = None
logger.info("writing byte-compilation script '%s'", script_name)
if not dry_run:
if script_fd is not None: