| Index: bootstrap/virtualenv/docs/index.rst
|
| diff --git a/bootstrap/virtualenv/docs/index.rst b/bootstrap/virtualenv/docs/index.rst
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..04f71914669bef416e27f83dba706b4e1d6193f3
|
| --- /dev/null
|
| +++ b/bootstrap/virtualenv/docs/index.rst
|
| @@ -0,0 +1,137 @@
|
| +Virtualenv
|
| +==========
|
| +
|
| +`Mailing list <http://groups.google.com/group/python-virtualenv>`_ |
|
| +`Issues <https://github.com/pypa/virtualenv/issues>`_ |
|
| +`Github <https://github.com/pypa/virtualenv>`_ |
|
| +`PyPI <https://pypi.python.org/pypi/virtualenv/>`_ |
|
| +User IRC: #pypa
|
| +Dev IRC: #pypa-dev
|
| +
|
| +Introduction
|
| +------------
|
| +
|
| +``virtualenv`` is a tool to create isolated Python environments.
|
| +
|
| +The basic problem being addressed is one of dependencies and versions,
|
| +and indirectly permissions. Imagine you have an application that
|
| +needs version 1 of LibFoo, but another application requires version
|
| +2. How can you use both these applications? If you install
|
| +everything into ``/usr/lib/python2.7/site-packages`` (or whatever your
|
| +platform's standard location is), it's easy to end up in a situation
|
| +where you unintentionally upgrade an application that shouldn't be
|
| +upgraded.
|
| +
|
| +Or more generally, what if you want to install an application *and
|
| +leave it be*? If an application works, any change in its libraries or
|
| +the versions of those libraries can break the application.
|
| +
|
| +Also, what if you can't install packages into the global
|
| +``site-packages`` directory? For instance, on a shared host.
|
| +
|
| +In all these cases, ``virtualenv`` can help you. It creates an
|
| +environment that has its own installation directories, that doesn't
|
| +share libraries with other virtualenv environments (and optionally
|
| +doesn't access the globally installed libraries either).
|
| +
|
| +.. comment: split here
|
| +
|
| +.. toctree::
|
| + :maxdepth: 2
|
| +
|
| + installation
|
| + userguide
|
| + reference
|
| + development
|
| + changes
|
| +
|
| +.. warning::
|
| +
|
| + Python bugfix releases 2.6.8, 2.7.3, 3.1.5 and 3.2.3 include a change that
|
| + will cause "import random" to fail with "cannot import name urandom" on any
|
| + virtualenv created on a Unix host with an earlier release of Python
|
| + 2.6/2.7/3.1/3.2, if the underlying system Python is upgraded. This is due to
|
| + the fact that a virtualenv uses the system Python's standard library but
|
| + contains its own copy of the Python interpreter, so an upgrade to the system
|
| + Python results in a mismatch between the version of the Python interpreter
|
| + and the version of the standard library. It can be fixed by removing
|
| + ``$ENV/bin/python`` and re-running virtualenv on the same target directory
|
| + with the upgraded Python.
|
| +
|
| +Other Documentation and Links
|
| +-----------------------------
|
| +
|
| +* `Blog announcement of virtualenv`__.
|
| +
|
| + .. __: http://blog.ianbicking.org/2007/10/10/workingenv-is-dead-long-live-virtualenv/
|
| +
|
| +* James Gardner has written a tutorial on using `virtualenv with
|
| + Pylons
|
| + <http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox>`_.
|
| +
|
| +* Chris Perkins created a `showmedo video including virtualenv
|
| + <http://showmedo.com/videos/video?name=2910000&fromSeriesID=291>`_.
|
| +
|
| +* Doug Hellmann's `virtualenvwrapper`_ is a useful set of scripts to make
|
| + your workflow with many virtualenvs even easier. `His initial blog post on it`__.
|
| + He also wrote `an example of using virtualenv to try IPython`__.
|
| +
|
| + .. _virtualenvwrapper: https://pypi.python.org/pypi/virtualenvwrapper/
|
| + .. __: http://www.doughellmann.com/articles/CompletelyDifferent-2008-05-virtualenvwrapper/index.html
|
| + .. __: http://www.doughellmann.com/articles/CompletelyDifferent-2008-02-ipython-and-virtualenv/index.html
|
| +
|
| +* `Pew`_ is another wrapper for virtualenv that makes use of a different
|
| + activation technique.
|
| +
|
| + .. _Pew: https://pypi.python.org/pypi/pew/
|
| +
|
| +* `Using virtualenv with mod_wsgi
|
| + <http://code.google.com/p/modwsgi/wiki/VirtualEnvironments>`_.
|
| +
|
| +* `virtualenv commands
|
| + <https://github.com/thisismedium/virtualenv-commands>`_ for some more
|
| + workflow-related tools around virtualenv.
|
| +
|
| +* PyCon US 2011 talk: `Reverse-engineering Ian Bicking's brain: inside pip and virtualenv
|
| + <http://pyvideo.org/video/568/reverse-engineering-ian-bicking--39-s-brain--insi>`_.
|
| + By the end of the talk, you'll have a good idea exactly how pip
|
| + and virtualenv do their magic, and where to go looking in the source
|
| + for particular behaviors or bug fixes.
|
| +
|
| +Compare & Contrast with Alternatives
|
| +------------------------------------
|
| +
|
| +There are several alternatives that create isolated environments:
|
| +
|
| +* ``workingenv`` (which I do not suggest you use anymore) is the
|
| + predecessor to this library. It used the main Python interpreter,
|
| + but relied on setting ``$PYTHONPATH`` to activate the environment.
|
| + This causes problems when running Python scripts that aren't part of
|
| + the environment (e.g., a globally installed ``hg`` or ``bzr``). It
|
| + also conflicted a lot with Setuptools.
|
| +
|
| +* `virtual-python
|
| + <http://peak.telecommunity.com/DevCenter/EasyInstall#creating-a-virtual-python>`_
|
| + is also a predecessor to this library. It uses only symlinks, so it
|
| + couldn't work on Windows. It also symlinks over the *entire*
|
| + standard library and global ``site-packages``. As a result, it
|
| + won't see new additions to the global ``site-packages``.
|
| +
|
| + This script only symlinks a small portion of the standard library
|
| + into the environment, and so on Windows it is feasible to simply
|
| + copy these files over. Also, it creates a new/empty
|
| + ``site-packages`` and also adds the global ``site-packages`` to the
|
| + path, so updates are tracked separately. This script also installs
|
| + Setuptools automatically, saving a step and avoiding the need for
|
| + network access.
|
| +
|
| +* `zc.buildout <http://pypi.python.org/pypi/zc.buildout>`_ doesn't
|
| + create an isolated Python environment in the same style, but
|
| + achieves similar results through a declarative config file that sets
|
| + up scripts with very particular packages. As a declarative system,
|
| + it is somewhat easier to repeat and manage, but more difficult to
|
| + experiment with. ``zc.buildout`` includes the ability to setup
|
| + non-Python systems (e.g., a database server or an Apache instance).
|
| +
|
| +I *strongly* recommend anyone doing application development or
|
| +deployment use one of these tools.
|
|
|