Commits

Daniel Holth committed 5fb9cc7 Draft

add bdist_wheel

  • Participants
  • Parent commits 65a08ee

Comments (0)

Files changed (3)

Lib/packaging/command/__init__.py

     'install_dist', 'install_lib', 'install_headers', 'install_scripts',
     'install_data', 'install_distinfo',
     # distributing
-    'sdist', 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_eby',
+    'sdist', 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',
     'register', 'upload', 'upload_docs',
     ]
 

Lib/packaging/command/bdist_eby.py

-"""Create an Extractable BinarY (eby) distribution.
-
-An eby is an archive that in the simple case can be installed 
-by extracting into site-packages, while preserving enough
-information for an installer to finish the job when necessary.
-"""
-
-import os
-import sys
-import sysconfig
-from shutil import rmtree
-from sysconfig import get_python_version
-
-from packaging.util import get_platform
-from packaging.command.cmd import Command
-from packaging.errors import PackagingPlatformError
-from packaging import logger
-
-
-class bdist_eby(Command):
-
-    description = 'create a simple built distribution'
-
-    user_options = [('bdist-dir=', 'd',
-                     "temporary directory for creating the distribution"),
-                    ('plat-name=', 'p',
-                     "platform name to embed in generated filenames "
-                     "(default: %s)" % get_platform()),
-                    ('keep-temp', 'k',
-                     "keep the pseudo-installation tree around after " +
-                     "creating the distribution archive"),
-                    ('dist-dir=', 'd',
-                     "directory to put final built distributions in"),
-                    ('skip-build', None,
-                     "skip rebuilding everything (for testing/debugging)"),
-                    ('relative', None,
-                     "build the archive using relative paths"
-                     "(default: false)"),
-                    ('owner=', 'u',
-                     "Owner name used when creating a tar file"
-                     " [default: current user]"),
-                    ('group=', 'g',
-                     "Group name used when creating a tar file"
-                     " [default: current group]"),
-                   ]
-
-    boolean_options = ['keep-temp', 'skip-build', 'relative']
-
-    def initialize_options(self):
-        self.bdist_dir = None
-        self.data_dir = None
-        self.plat_name = None
-        self.format = 'zip'
-        self.keep_temp = False
-        self.dist_dir = None
-        self.skip_build = None
-        self.relative = False
-        self.owner = None
-        self.group = None
-
-    def finalize_options(self):
-        if self.bdist_dir is None:
-            bdist_base = self.get_finalized_command('bdist').bdist_base
-            self.bdist_dir = os.path.join(bdist_base, 'simple')
-             
-        self.data_dir = os.path.join(self.bdist_dir, 
-                                     self.distribution.get_fullname() + '.data')
-        
-        self.set_undefined_options('bdist',
-                                   'dist_dir', 'plat_name', 'skip_build')
-
-    def get_abbr_impl(self):
-        """Return abbreviated implementation name"""
-        if hasattr(sys, 'pypy_version_info'):
-            pyimpl = 'pp'
-        elif sys.platform.startswith('java'):
-            pyimpl = 'jy'
-        elif sys.platform == 'cli':
-            pyimpl = 'ip'
-        else:
-            pyimpl = 'cp'
-        return pyimpl
-
-    def get_eby_name(self):
-        has_ext_modules = self.distribution.has_ext_modules()
-        if not has_ext_modules:
-            plat_name = 'noarch'
-            impl_name = 'py'
-        else:
-            plat_name = self.plat_name.replace('-', '_')
-            impl_name = self.get_abbr_impl()
-        nodot = sysconfig.get_config_var("py_version_nodot")
-        archive_basename = "%s-%s-%s" % (
-                self.distribution.get_fullname(),
-                impl_name + nodot,
-                plat_name)
-        return archive_basename
-
-    def run(self):
-        if not self.skip_build:
-            self.run_command('build')
-
-        install = self.reinitialize_command('install_dist',
-                                            reinit_subcommands=True)
-        install.root = self.bdist_dir
-        install.compile = False
-        install.skip_build = self.skip_build
-        install.warn_dir = False
-
-        for key in ('purelib', 'platlib'):
-            setattr(install,
-                   'install_' + key,
-                   '.')
-
-        # Use a custom scheme for the zip-file, because we have to decide
-        # at installation time which scheme to use.
-        for key in ('headers', 'scripts', 'data'):
-            setattr(install,
-                    'install_' + key,
-                    os.path.join(self.data_dir, key))
-
-        logger.info("installing to %s", self.bdist_dir)
-        self.fixup_data_files()
-        self.run_command('install_dist')
-
-        archive_basename = self.get_eby_name()
-
-        # OS/2 objects to any ":" characters in a filename (such as when
-        # a timestamp is used in a version) so change them to hyphens.
-        if os.name == "os2":
-            archive_basename = archive_basename.replace(":", "-")
-
-        pseudoinstall_root = os.path.join(self.dist_dir, archive_basename)
-        if not self.relative:
-            archive_root = self.bdist_dir
-        else:
-            if (self.distribution.has_ext_modules() and
-                (install.install_base != install.install_platbase)):
-                raise PackagingPlatformError(
-                    "can't make a simple built distribution where base and "
-                    "platbase are different (%r, %r)" %
-                    (install.install_base, install.install_platbase))
-            else:
-                archive_root = os.path.join(
-                    self.bdist_dir,
-                    self._ensure_relative(install.install_base))
-
-        # Make the archive
-        filename = self.make_archive(pseudoinstall_root,
-                                     self.format, root_dir=archive_root,
-                                     owner=self.owner, group=self.group)
-        
-        os.rename(filename, filename[:-3] + 'eby')
-
-        if not self.keep_temp:
-            if self.dry_run:
-                logger.info('removing %s', self.bdist_dir)
-            else:
-                rmtree(self.bdist_dir)
-                
-    def fixup_data_files(self):
-        """Put all resources in a .data directory"""        
-        data_files = {}
-        for k, v in self.distribution.data_files.items():
-            # {dist-info} is already in our directory tree
-            if v.startswith('{') and not v.startswith('{dist-info}'):
-                # XXX assert valid (in sysconfig.get_paths() or 'distribution.name')
-                data_files[k] = os.path.join(self.data_dir,
-                                             v.replace('{', '').replace('}', ''))
-        self.distribution.data_files.update(data_files)
-
-    def _ensure_relative(self, path):
-        # copied from dir_util, deleted
-        drive, path = os.path.splitdrive(path)
-        if path[0:1] == os.sep:
-            path = drive + path[1:]
-        return path

Lib/packaging/command/bdist_wheel.py

+"""Create a wheel (.whl) distribution.
+
+A wheel is a built archive that decouples the build and install process. 
+"""
+
+import os
+import sys
+import sysconfig
+from shutil import rmtree
+from sysconfig import get_python_version
+
+from packaging.util import get_platform
+from packaging.command.cmd import Command
+from packaging.errors import PackagingPlatformError
+from packaging import logger
+
+
+class bdist_wheel(Command):
+
+    description = 'create a wheel of cheese'
+
+    user_options = [('bdist-dir=', 'd',
+                     "temporary directory for creating the distribution"),
+                    ('plat-name=', 'p',
+                     "platform name to embed in generated filenames "
+                     "(default: %s)" % get_platform()),
+                    ('keep-temp', 'k',
+                     "keep the pseudo-installation tree around after " +
+                     "creating the distribution archive"),
+                    ('dist-dir=', 'd',
+                     "directory to put final built distributions in"),
+                    ('skip-build', None,
+                     "skip rebuilding everything (for testing/debugging)"),
+                    ('relative', None,
+                     "build the archive using relative paths"
+                     "(default: false)"),
+                    ('owner=', 'u',
+                     "Owner name used when creating a tar file"
+                     " [default: current user]"),
+                    ('group=', 'g',
+                     "Group name used when creating a tar file"
+                     " [default: current group]"),
+                   ]
+
+    boolean_options = ['keep-temp', 'skip-build', 'relative']
+
+    def initialize_options(self):
+        self.bdist_dir = None
+        self.data_dir = None
+        self.plat_name = None
+        self.format = 'zip'
+        self.keep_temp = False
+        self.dist_dir = None
+        self.skip_build = None
+        self.relative = False
+        self.owner = None
+        self.group = None
+
+    def finalize_options(self):
+        if self.bdist_dir is None:
+            bdist_base = self.get_finalized_command('bdist').bdist_base
+            self.bdist_dir = os.path.join(bdist_base, 'simple')
+             
+        self.data_dir = os.path.join(self.bdist_dir, 
+                                     self.distribution.get_fullname() + '.data')
+        
+        self.set_undefined_options('bdist',
+                                   'dist_dir', 'plat_name', 'skip_build')
+
+    def get_abbr_impl(self):
+        """Return abbreviated implementation name"""
+        if hasattr(sys, 'pypy_version_info'):
+            pyimpl = 'pp'
+        elif sys.platform.startswith('java'):
+            pyimpl = 'jy'
+        elif sys.platform == 'cli':
+            pyimpl = 'ip'
+        else:
+            pyimpl = 'cp'
+        return pyimpl
+
+    def get_archive_basename(self):
+        """Return archive name without extension"""
+        has_ext_modules = self.distribution.has_ext_modules()
+        if not has_ext_modules:
+            plat_name = 'noarch'
+            impl_name = 'py'
+        else:
+            plat_name = self.plat_name.replace('-', '_')
+            impl_name = self.get_abbr_impl()
+        nodot = sysconfig.get_config_var("py_version_nodot")
+        archive_basename = "%s-%s-%s" % (
+                self.distribution.get_fullname(),
+                impl_name + nodot,
+                plat_name)
+        return archive_basename
+
+    def run(self):
+        if not self.skip_build:
+            self.run_command('build')
+
+        install = self.reinitialize_command('install_dist',
+                                            reinit_subcommands=True)
+        install.root = self.bdist_dir
+        install.compile = False
+        install.skip_build = self.skip_build
+        install.warn_dir = False
+
+        for key in ('purelib', 'platlib'):
+            setattr(install,
+                   'install_' + key,
+                   '.')
+
+        # Use a custom scheme for the archive, because we have to decide
+        # at installation time which scheme to use.
+        for key in ('headers', 'scripts', 'data'):
+            setattr(install,
+                    'install_' + key,
+                    os.path.join(self.data_dir, key))
+
+        logger.info("installing to %s", self.bdist_dir)
+        self.fixup_data_files()
+        self.run_command('install_dist')
+
+        archive_basename = self.get_archive_basename()
+
+        # OS/2 objects to any ":" characters in a filename (such as when
+        # a timestamp is used in a version) so change them to hyphens.
+        if os.name == "os2":
+            archive_basename = archive_basename.replace(":", "-")
+
+        pseudoinstall_root = os.path.join(self.dist_dir, archive_basename)
+        if not self.relative:
+            archive_root = self.bdist_dir
+        else:
+            if (self.distribution.has_ext_modules() and
+                (install.install_base != install.install_platbase)):
+                raise PackagingPlatformError(
+                    "can't make a simple built distribution where base and "
+                    "platbase are different (%r, %r)" %
+                    (install.install_base, install.install_platbase))
+            else:
+                archive_root = os.path.join(
+                    self.bdist_dir,
+                    self._ensure_relative(install.install_base))
+
+        # Make the archive
+        filename = self.make_archive(pseudoinstall_root,
+                                     self.format, root_dir=archive_root,
+                                     owner=self.owner, group=self.group)
+        
+        os.rename(filename, filename[:-3] + 'whl')
+
+        if not self.keep_temp:
+            if self.dry_run:
+                logger.info('removing %s', self.bdist_dir)
+            else:
+                rmtree(self.bdist_dir)
+                
+    def fixup_data_files(self):
+        """Put all resources in a .data directory"""        
+        data_files = {}
+        for k, v in self.distribution.data_files.items():
+            # {dist-info} is already in our directory tree
+            if v.startswith('{') and not v.startswith('{dist-info}'):
+                # XXX assert valid (in sysconfig.get_paths() or 'distribution.name')
+                data_files[k] = os.path.join(self.data_dir,
+                                             v.replace('{', '').replace('}', ''))
+        self.distribution.data_files.update(data_files)
+
+    def _ensure_relative(self, path):
+        # copied from dir_util, deleted
+        drive, path = os.path.splitdrive(path)
+        if path[0:1] == os.sep:
+            path = drive + path[1:]
+        return path