aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/command/bdist_egg.py
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2005-03-21 19:50:46 +0000
committerPJ Eby <distutils-sig@python.org>2005-03-21 19:50:46 +0000
commite9230cf512726e5ea428028c564a5b6a36b91095 (patch)
tree20ec3e3f76edb6e59a50e69fd60762b4d6af6ff2 /setuptools/command/bdist_egg.py
parentecc9eaadaaa30af17bff8b4254940344ad528279 (diff)
downloadexternal_python_setuptools-e9230cf512726e5ea428028c564a5b6a36b91095.tar.gz
external_python_setuptools-e9230cf512726e5ea428028c564a5b6a36b91095.tar.bz2
external_python_setuptools-e9230cf512726e5ea428028c564a5b6a36b91095.zip
Add 'bdist_egg' command/format to allow creating "Python Eggs" (see
http://peak.telecommunity.com/DevCenter/PythonEggs for details). This version only supports pure libraries and does not support user-defined metadata. But it's sufficient to make .egg files that can be placed on PYTHONPATH and used. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4040989
Diffstat (limited to 'setuptools/command/bdist_egg.py')
-rw-r--r--setuptools/command/bdist_egg.py144
1 files changed, 144 insertions, 0 deletions
diff --git a/setuptools/command/bdist_egg.py b/setuptools/command/bdist_egg.py
new file mode 100644
index 00000000..29c8fa5c
--- /dev/null
+++ b/setuptools/command/bdist_egg.py
@@ -0,0 +1,144 @@
+"""setuptools.command.bdist_egg
+
+Build .egg distributions"""
+
+# This module should be kept compatible with Python 2.1
+
+import os
+from distutils.core import Command
+from distutils.util import get_platform
+from distutils.dir_util import create_tree, remove_tree, ensure_relative,mkpath
+from distutils.errors import *
+from distutils import log
+
+class bdist_egg(Command):
+
+ description = "create an \"egg\" 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)"),
+ ]
+
+ boolean_options = ['keep-temp', 'skip-build', 'relative']
+
+
+ def initialize_options (self):
+ self.bdist_dir = None
+ self.plat_name = None
+ self.keep_temp = 0
+ self.dist_dir = None
+ self.skip_build = 0
+ self.relative = 0
+
+ # initialize_options()
+
+
+ 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, 'egg')
+
+ self.set_undefined_options('bdist',
+ ('dist_dir', 'dist_dir'),
+ ('plat_name', 'plat_name'))
+
+ # finalize_options()
+
+
+ def run (self):
+
+ if not self.skip_build:
+ self.run_command('build')
+
+ install = self.reinitialize_command('install_lib', reinit_subcommands=1)
+ install.install_dir = self.bdist_dir
+ install.skip_build = self.skip_build
+ install.warn_dir = 0
+
+ log.info("installing to %s" % self.bdist_dir)
+ self.run_command('install_lib')
+
+ # And make an archive relative to the root of the
+ # pseudo-installation tree.
+ archive_basename = "%s-%s" % (self.distribution.get_fullname(),
+ self.plat_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)
+ archive_root = self.bdist_dir
+
+ # Make the EGG-INFO directory
+ log.info("creating EGG-INFO files")
+ egg_info = os.path.join(archive_root,'EGG-INFO')
+ self.mkpath(egg_info)
+
+ if not self.dry_run:
+ self.distribution.metadata.write_pkg_info(egg_info)
+
+ # Make the archive
+ make_zipfile(pseudoinstall_root+'.egg',
+ archive_root, verbose=self.verbose,
+ dry_run=self.dry_run)
+
+ if not self.keep_temp:
+ remove_tree(self.bdist_dir, dry_run=self.dry_run)
+
+ # run()
+
+# class bdist_egg
+
+
+
+def make_zipfile (zip_filename, base_dir, verbose=0, dry_run=0):
+ """Create a zip file from all the files under 'base_dir'. The output
+ zip file will be named 'base_dir' + ".zip". Uses either the "zipfile"
+ Python module (if available) or the InfoZIP "zip" utility (if installed
+ and found on the default search path). If neither tool is available,
+ raises DistutilsExecError. Returns the name of the output zip file.
+ """
+ import zipfile
+
+ mkpath(os.path.dirname(zip_filename), dry_run=dry_run)
+
+ # If zipfile module is not available, try spawning an external
+ # 'zip' command.
+ log.info("creating '%s' and adding '%s' to it",
+ zip_filename, base_dir)
+
+ def visit (z, dirname, names):
+ for name in names:
+ path = os.path.normpath(os.path.join(dirname, name))
+ if os.path.isfile(path):
+ p = path[len(base_dir)+1:]
+ z.write(path, p)
+ log.info("adding '%s'" % p)
+
+ if not dry_run:
+ z = zipfile.ZipFile(zip_filename, "w",
+ compression=zipfile.ZIP_DEFLATED)
+
+ os.path.walk(base_dir, visit, z)
+ z.close()
+
+ return zip_filename
+
+# make_zipfile ()
+