aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2005-08-06 19:29:49 +0000
committerPJ Eby <distutils-sig@python.org>2005-08-06 19:29:49 +0000
commit8afe820f59c3b63795bd235f2800b0e1329eb7e1 (patch)
treea1d513446260cf010850a1a1e52a7d1815bb40a2
parent8a29467d941a7983d5f6eadc5c0e1624417944b6 (diff)
downloadexternal_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.tar.gz
external_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.tar.bz2
external_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.zip
Got rid of the no-longer meaningful "depends" command. Consolidated the
replacement of the "install" command so that installation is always via easy_install, but doesn't use the previous kludgy intereception technique. Allow ``extra_path`` to be set, but ignore it, so that when easy_install wraps a package that uses it, there won't be any confusion as to the desired installation location. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041181
-rwxr-xr-xsetuptools.egg-info/entry_points.txt3
-rwxr-xr-xsetuptools.txt8
-rw-r--r--setuptools/command/__init__.py2
-rw-r--r--setuptools/command/depends.py149
-rw-r--r--setuptools/command/install.py28
-rw-r--r--setuptools/dist.py57
-rw-r--r--setuptools/tests/__init__.py41
7 files changed, 40 insertions, 248 deletions
diff --git a/setuptools.egg-info/entry_points.txt b/setuptools.egg-info/entry_points.txt
index def14fac..82f0990e 100755
--- a/setuptools.egg-info/entry_points.txt
+++ b/setuptools.egg-info/entry_points.txt
@@ -13,10 +13,9 @@ setopt = setuptools.command.setopt:setopt
build_py = setuptools.command.build_py:build_py
saveopts = setuptools.command.saveopts:saveopts
egg_info = setuptools.command.egg_info:egg_info
-easy_install = setuptools.command.easy_install:easy_install
upload = setuptools.command.upload:upload
alias = setuptools.command.alias:alias
-depends = setuptools.command.depends:depends
+easy_install = setuptools.command.easy_install:easy_install
bdist_egg = setuptools.command.bdist_egg:bdist_egg
install = setuptools.command.install:install
test = setuptools.command.test:test
diff --git a/setuptools.txt b/setuptools.txt
index 7f9c8551..872830aa 100755
--- a/setuptools.txt
+++ b/setuptools.txt
@@ -1713,6 +1713,10 @@ Release Notes/Change History
using entry points, so that they are extensible by third-party packages.
See `Creating distutils Extensions`_ above for more details.
+ * The vestigial ``depends`` command has been removed. It was never finished
+ or documented, and never would have worked without EasyInstall - which it
+ pre-dated and was never compatible with.
+
* Many ``pkg_resources`` API changes and enhancements:
* Added ``EntryPoint``, ``get_entry_map``, ``load_entry_point``, and
@@ -1918,9 +1922,7 @@ Release Notes/Change History
see the ``setuptools.dist.Distribution`` class.
* Setup scripts using setuptools now always install using ``easy_install``
- internally, for ease of uninstallation and upgrading. Note: you *must*
- remove any ``extra_path`` argument from your setup script, as it conflicts
- with the proper functioning of the ``easy_install`` command.
+ internally, for ease of uninstallation and upgrading.
* ``pkg_resources.AvailableDistributions.resolve()`` and related methods now
accept an ``installer`` argument: a callable taking one argument, a
diff --git a/setuptools/command/__init__.py b/setuptools/command/__init__.py
index a58b5344..720b7a3f 100644
--- a/setuptools/command/__init__.py
+++ b/setuptools/command/__init__.py
@@ -1,5 +1,5 @@
__all__ = [
- 'alias', 'bdist_egg', 'build_ext', 'build_py', 'depends', 'develop',
+ 'alias', 'bdist_egg', 'build_ext', 'build_py', 'develop',
'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts',
'sdist', 'setopt', 'test', 'upload',
]
diff --git a/setuptools/command/depends.py b/setuptools/command/depends.py
deleted file mode 100644
index cd8442b7..00000000
--- a/setuptools/command/depends.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import os
-import sys
-
-from distutils.cmd import Command
-
-
-class depends(Command):
- """Download and install dependencies, if needed"""
-
- description = "download and install dependencies, if needed"
-
- user_options = [
- ('temp=', 't',
- "directory where dependencies will be downloaded and built"),
- ('ignore-extra-args', 'i',
- "ignore options that won't be passed to child setup scripts"),
- ]
-
- path_attrs = [
- # Note: these must be in *reverse* order, as they are pushed onto the
- # *front* of a copy of sys.path.
- ('install', 'install_libbase'), # installation base if extra_path
- ('install_lib', 'install_dir'), # where modules are installed
- ]
-
- # Command options that can be safely passed to dependencies' setup scripts
- safe_opts = {
- 'install': [
- 'prefix', 'exec-prefix', 'home', 'install-base',
- 'install-platbase', 'root', 'optimize', 'force', 'verbose', 'quiet'
- ],
- 'build': ['compiler', 'debug', 'force', 'verbose', 'quiet'],
- }
-
- # Options with string arguments that are *not* directories or files, and
- # so should *not* have absolute-path fixups applied.
- non_fs_opts = {'build': ['compiler']}
-
- def initialize_options(self):
- self.temp = None; self.ignore_extra_args = None
-
- def finalize_options(self):
- self.set_undefined_options('build',('build_temp', 'temp'))
- self.set_search_path()
- self.set_subcommand_args()
-
- def set_subcommand_args(self):
- safe = {'install':[]} # ensure we at least perform an install
- unsafe = {}
- copts = self.distribution.get_cmdline_options()
-
- if 'depends' in copts:
- del copts['depends']
-
- for cmd,opts in copts.items():
- safe_opts = self.safe_opts.get(cmd,())
- non_fs_opts = self.non_fs_opts.get(cmd,())
-
- for opt,val in opts.items():
- if opt in safe_opts:
- cmdline = safe.setdefault(cmd,[])
- if val is not None and opt not in non_fs_opts:
- val = os.path.abspath(val)
- else:
- cmdline = unsafe.setdefault(cmd,[])
-
- cmdline.append('--'+opt)
- if val is not None:
- cmdline.append(val)
-
- self.safe_options = safe
- self.unsafe_options = unsafe
-
- def set_search_path(self):
- """Determine paths to check for installed dependencies"""
- path = sys.path[:] # copy sys path
- for cmd,attr in self.path_attrs:
- dir = getattr(self.get_finalized_command(cmd),attr,None)
- if dir and dir not in path:
- path.insert(0,dir) # prepend
- self.search_path = path
-
- def run(self):
- self.announce("checking for installed dependencies")
-
- needed = [
- dep for dep in self.distribution.requires if self.is_needed(dep)
- ]
-
- if not needed:
- self.announce("all dependencies are present and up-to-date")
- return
-
- argv = [sys.executable,'setup.py']
- for cmd,line in self.safe_options.items():
- argv.append(cmd); argv.extend(line)
-
- self.announce(
- "dependencies will be installed using:\n "+' '.join(argv)+'\n'
- )
-
- # Alert for unsupported commands/options, unless '-i' was used
- if self.unsafe_options:
- self.warn_unsafe_options_used()
- if not self.ignore_extra_args:
- raise SystemExit(
- "Unsupported options for building dependencies; please"
- " add 'depends -i'\nto your command line if you want to"
- " force the build to proceed.\nOtherwise, you will need"
- " to omit the unsupported options,\nor install the"
- " dependencies manually."
- )
-
- # Alert the user to missing items
- fmt = "\t%s\t%s\n"
- items = [fmt % (dep.full_name(), dep.homepage) for dep in needed]
- items.insert(0,"Please install the following packages *first*:\n")
- items.append('')
- raise SystemExit('\n'.join(items)) # dump msg to stderr and exit
-
- def warn_unsafe_options_used(self):
- lines = []; write = lines.append
- write("the following command options are not supported for building")
- write("dependencies, and will be IGNORED:")
- for cmd,line in self.unsafe_options.items():
- write('\t%s %s' % (cmd, ' '.join(line)))
- write('')
- self.warn('\n'.join(lines))
-
- def is_needed(self,dep):
- """Does the specified dependency need to be installed/updated?"""
- self.announce("searching for "+dep.full_name())
- version = dep.get_version(self.search_path)
-
- if version is None:
- self.announce(name+" not found!")
- return True
-
- if str(version)=="unknown":
- status = dep.name+" is installed"
- else:
- status = dep.name+" version "+str(version)+" found"
-
- if dep.version_ok(version):
- self.announce(status+" (OK)")
- return False
- else:
- self.announce(status+" (update needed)")
- return True
diff --git a/setuptools/command/install.py b/setuptools/command/install.py
index 86f0cb7b..acbe8ade 100644
--- a/setuptools/command/install.py
+++ b/setuptools/command/install.py
@@ -1,9 +1,31 @@
+import setuptools
from distutils.command.install import install as _install
class install(_install):
"""Build dependencies before installation"""
- def has_dependencies(self):
- return self.distribution.has_dependencies()
+ def handle_extra_path(self):
+ # We always ignore extra_path, because we always install eggs
+ # (you can always use install_* commands directly if needed)
+ self.path_file = None
+ self.extra_dirs = ''
+
+ def run(self):
+ from setuptools.command.easy_install import easy_install
+ cmd = easy_install(
+ self.distribution, args="x", ignore_conflicts_at_my_risk=1
+ )
+ cmd.ensure_finalized() # finalize before bdist_egg munges install cmd
+
+ self.run_command('bdist_egg')
+ args = [self.distribution.get_command_obj('bdist_egg').egg_output]
+
+ if setuptools.bootstrap_install_from:
+ # Bootstrap self-installation of setuptools
+ args.insert(0, setuptools.bootstrap_install_from)
+
+ cmd.args = args
+ cmd.run()
+ setuptools.bootstrap_install_from = None
+
- sub_commands = [('depends', has_dependencies)] + _install.sub_commands
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 6d226d68..02458858 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -207,9 +207,8 @@ class Distribution(_Distribution):
have_package_data = hasattr(self, "package_data")
if not have_package_data:
self.package_data = {}
-
+ self.requires = [] # XXX
self.features = {}
- self.requires = []
self.dist_files = []
if attrs and 'setup_requires' in attrs:
@@ -244,18 +243,13 @@ class Distribution(_Distribution):
+
def finalize_options(self):
_Distribution.finalize_options(self)
if self.features:
self._set_global_opts_from_features()
- if self.extra_path:
- raise DistutilsSetupError(
- "The 'extra_path' parameter is not needed when using "
- "setuptools. Please remove it from your setup script."
- )
-
for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'):
value = getattr(self,ep.name,None)
if value is not None:
@@ -285,6 +279,12 @@ class Distribution(_Distribution):
+
+
+
+
+
+
def _set_global_opts_from_features(self):
"""Add --with-X/--without-X options based on optional features"""
@@ -572,47 +572,6 @@ class Distribution(_Distribution):
- def has_dependencies(self):
- return not not self.requires
-
- def run_commands(self):
- for cmd in self.commands:
- if cmd=='install' and not cmd in self.have_run:
- self.install_eggs()
- else:
- self.run_command(cmd)
-
- def install_eggs(self):
- from setuptools.command.easy_install import easy_install
- cmd = easy_install(self, args="x", ignore_conflicts_at_my_risk=1)
- cmd.ensure_finalized() # finalize before bdist_egg munges install cmd
-
- self.run_command('bdist_egg')
- args = [self.get_command_obj('bdist_egg').egg_output]
-
- if setuptools.bootstrap_install_from:
- # Bootstrap self-installation of setuptools
- args.insert(0, setuptools.bootstrap_install_from)
-
- cmd.args = args
- cmd.run()
- self.have_run['install'] = 1
- setuptools.bootstrap_install_from = None
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
def get_cmdline_options(self):
"""Return a '{cmd: {opt:val}}' map of all command-line options
diff --git a/setuptools/tests/__init__.py b/setuptools/tests/__init__.py
index 97be5626..7009b321 100644
--- a/setuptools/tests/__init__.py
+++ b/setuptools/tests/__init__.py
@@ -121,47 +121,6 @@ class DependsTests(TestCase):
- def testDependsCmd(self):
- path = convert_path('foo/bar/baz')
-
- dist = makeSetup(
- script_args=['install','--install-lib',path]
- )
-
- cmd = dist.get_command_obj('depends')
- cmd.ensure_finalized()
-
- self.assertEqual(cmd.temp, dist.get_command_obj('build').build_temp)
- self.assertEqual(cmd.search_path, [path+os.path.sep,path]+sys.path)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
class DistroTests(TestCase):
def setUp(self):