summaryrefslogtreecommitdiff
path: root/docs/distribute_setuptools.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/distribute_setuptools.rst')
-rw-r--r--docs/distribute_setuptools.rst69
1 files changed, 69 insertions, 0 deletions
diff --git a/docs/distribute_setuptools.rst b/docs/distribute_setuptools.rst
new file mode 100644
index 000000000..f47dbf8d5
--- /dev/null
+++ b/docs/distribute_setuptools.rst
@@ -0,0 +1,69 @@
+:orphan:
+
+"ImportError: No module named setuptools"
++++++++++++++++++++++++++++++++++++++++++
+
+Although using ``pip install --upgrade setuptools`` to upgrade from distribute
+to setuptools works in isolation, it's possible to get "ImportError: No module
+named setuptools" when using pip<1.4 to upgrade a package that depends on
+setuptools or distribute.
+
+e.g. when running a command like this: `pip install --upgrade pyramid`
+
+Solution
+~~~~~~~~
+
+To prevent the problem in *new* environments (that aren't broken yet):
+
+* Option 1:
+
+ * *First* run `pip install -U setuptools`,
+ * *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
+
+* Option 2:
+
+ * Upgrade pip using :ref:`get-pip <get-pip>`
+ * *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
+
+To fix the problem once it's occurred, you'll need to manually install the new
+setuptools, then rerun the upgrade that failed.
+
+1. Download `ez_setup.py` (https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py)
+2. Run `python ez_setup.py`
+3. Then rerun your upgrade (e.g. `pip install --upgrade pyramid`)
+
+
+Cause
+~~~~~
+
+distribute-0.7.3 is just an empty wrapper that only serves to require the new
+setuptools (setuptools>=0.7) so that it will be installed. (If you don't know
+yet, the "new setuptools" is a merge of distribute and setuptools back into one
+project).
+
+distribute-0.7.3 does its job well, when the upgrade is done in isolation.
+E.g. if you're currently on distribute-0.6.X, then running `pip install -U
+setuptools` works fine to upgrade you to setuptools>=0.7.
+
+The problem occurs when:
+
+1. you are currently using an older distribute (i.e. 0.6.X)
+2. and you try to use pip to upgrade a package that *depends* on setuptools or
+ distribute.
+
+As part of the upgrade process, pip builds an install list that ends up
+including distribute-0.7.3 and setuptools>=0.7 , but they can end up being
+separated by other dependencies in the list, so what can happen is this:
+
+1. pip uninstalls the existing distribute
+2. pip installs distribute-0.7.3 (which has no importable setuptools, that pip
+ *needs* internally to function)
+3. pip moves on to install another dependency (before setuptools>=0.7) and is
+ unable to proceed without the setuptools package
+
+Note that pip v1.4 has fixes to prevent this. distribute-0.7.3 (or
+setuptools>=0.7) by themselves cannot prevent this kind of problem.
+
+
+.. _setuptools: https://pypi.python.org/pypi/setuptools
+.. _distribute: https://pypi.python.org/pypi/distribute