[Python-checkins] cpython (merge default -> default): Branch merge

eric.araujo python-checkins at python.org
Mon Sep 19 16:10:52 CEST 2011


http://hg.python.org/cpython/rev/d92b17b1dce6
changeset:   72405:d92b17b1dce6
parent:      72404:a400c1c087dd
parent:      72402:f18e9db83483
user:        Éric Araujo <merwok at netwok.org>
date:        Sun Sep 18 20:24:27 2011 +0200
summary:
  Branch merge

files:
  Lib/packaging/command/build_ext.py               |  17 +-
  Lib/packaging/command/build_py.py                |   2 +-
  Lib/packaging/command/install_dist.py            |  59 +++------
  Lib/packaging/command/install_distinfo.py        |   7 +-
  Lib/packaging/command/install_lib.py             |   2 +-
  Lib/packaging/compiler/bcppcompiler.py           |   1 -
  Lib/packaging/compiler/ccompiler.py              |   1 -
  Lib/packaging/dist.py                            |   4 +-
  Lib/packaging/tests/test_command_build_ext.py    |   8 +-
  Lib/packaging/tests/test_command_build_py.py     |   2 -
  Lib/packaging/tests/test_command_install_dist.py |  12 +-
  Lib/packaging/tests/test_command_install_lib.py  |  11 +-
  Lib/packaging/tests/test_mixin2to3.py            |   3 -
  Lib/packaging/tests/test_util.py                 |   4 -
  Lib/packaging/util.py                            |   6 +-
  Lib/pkgutil.py                                   |   4 +-
  16 files changed, 47 insertions(+), 96 deletions(-)


diff --git a/Lib/packaging/command/build_ext.py b/Lib/packaging/command/build_ext.py
--- 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.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 @@
         ('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 @@
          "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 @@
         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 @@
             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
--- a/Lib/packaging/command/build_py.py
+++ b/Lib/packaging/command/build_py.py
@@ -388,7 +388,7 @@
                 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
--- a/Lib/packaging/command/install_dist.py
+++ b/Lib/packaging/command/install_dist.py
@@ -14,9 +14,6 @@
 from packaging.errors import PackagingOptionError
 
 
-HAS_USER_SITE = True
-
-
 class install_dist(Command):
 
     description = "install everything from build directory"
@@ -27,6 +24,9 @@
          "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 @@
         ]
 
     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 @@
         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 @@
         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 @@
             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 @@
             '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 @@
 
         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 @@
 
         # 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 @@
                     "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 @@
 
     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 @@
             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
--- 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 os
 import csv
-import os
-import re
 import hashlib
+from shutil import rmtree
 
+from packaging import logger
 from packaging.command.cmd import Command
-from packaging import logger
-from shutil import rmtree
 
 
 class install_distinfo(Command):
diff --git a/Lib/packaging/command/install_lib.py b/Lib/packaging/command/install_lib.py
--- a/Lib/packaging/command/install_lib.py
+++ b/Lib/packaging/command/install_lib.py
@@ -114,7 +114,7 @@
         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
--- a/Lib/packaging/compiler/bcppcompiler.py
+++ b/Lib/packaging/compiler/bcppcompiler.py
@@ -352,5 +352,4 @@
             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
--- a/Lib/packaging/compiler/ccompiler.py
+++ b/Lib/packaging/compiler/ccompiler.py
@@ -5,7 +5,6 @@
 """
 
 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/dist.py b/Lib/packaging/dist.py
--- a/Lib/packaging/dist.py
+++ b/Lib/packaging/dist.py
@@ -537,7 +537,7 @@
     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 @@
     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
--- a/Lib/packaging/tests/test_command_build_ext.py
+++ b/Lib/packaging/tests/test_command_build_ext.py
@@ -19,18 +19,13 @@
                        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 @@
         # 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
--- a/Lib/packaging/tests/test_command_build_py.py
+++ b/Lib/packaging/tests/test_command_build_py.py
@@ -99,8 +99,6 @@
             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
--- a/Lib/packaging/tests/test_command_install_dist.py
+++ b/Lib/packaging/tests/test_command_install_dist.py
@@ -72,7 +72,6 @@
         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 @@
         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
--- a/Lib/packaging/tests/test_command_install_lib.py
+++ b/Lib/packaging/tests/test_command_install_lib.py
@@ -7,13 +7,6 @@
 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 @@
         cmd.finalize_options()
         self.assertEqual(cmd.optimize, 2)
 
-    @unittest.skipIf(no_bytecode, 'byte-compile disabled')
+    @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
     def test_byte_compile(self):
         pkg_dir, dist = self.create_dist()
         cmd = install_lib(dist)
@@ -89,8 +82,6 @@
         # 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
--- a/Lib/packaging/tests/test_mixin2to3.py
+++ b/Lib/packaging/tests/test_mixin2to3.py
@@ -9,7 +9,6 @@
                         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 @@
 
         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 @@
 
         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
--- a/Lib/packaging/tests/test_util.py
+++ b/Lib/packaging/tests/test_util.py
@@ -319,8 +319,6 @@
         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 @@
         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')"
@@ -421,7 +418,6 @@
         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
--- a/Lib/packaging/util.py
+++ b/Lib/packaging/util.py
@@ -326,7 +326,7 @@
     """
     # 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 @@
     # 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:
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -307,9 +307,9 @@
     def get_filename(self, fullname=None):
         fullname = self._fix_name(fullname)
         mod_type = self.etc[2]
-        if self.etc[2]==imp.PKG_DIRECTORY:
+        if mod_type==imp.PKG_DIRECTORY:
             return self._get_delegate().get_filename()
-        elif self.etc[2] in (imp.PY_SOURCE, imp.PY_COMPILED, imp.C_EXTENSION):
+        elif mod_type in (imp.PY_SOURCE, imp.PY_COMPILED, imp.C_EXTENSION):
             return self.filename
         return None
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list