OLD | NEW |
(Empty) | |
| 1 Virtualenv |
| 2 ========== |
| 3 |
| 4 `Mailing list <http://groups.google.com/group/python-virtualenv>`_ | |
| 5 `Issues <https://github.com/pypa/virtualenv/issues>`_ | |
| 6 `Github <https://github.com/pypa/virtualenv>`_ | |
| 7 `PyPI <https://pypi.python.org/pypi/virtualenv/>`_ | |
| 8 User IRC: #pypa |
| 9 Dev IRC: #pypa-dev |
| 10 |
| 11 Introduction |
| 12 ------------ |
| 13 |
| 14 ``virtualenv`` is a tool to create isolated Python environments. |
| 15 |
| 16 The basic problem being addressed is one of dependencies and versions, |
| 17 and indirectly permissions. Imagine you have an application that |
| 18 needs version 1 of LibFoo, but another application requires version |
| 19 2. How can you use both these applications? If you install |
| 20 everything into ``/usr/lib/python2.7/site-packages`` (or whatever your |
| 21 platform's standard location is), it's easy to end up in a situation |
| 22 where you unintentionally upgrade an application that shouldn't be |
| 23 upgraded. |
| 24 |
| 25 Or more generally, what if you want to install an application *and |
| 26 leave it be*? If an application works, any change in its libraries or |
| 27 the versions of those libraries can break the application. |
| 28 |
| 29 Also, what if you can't install packages into the global |
| 30 ``site-packages`` directory? For instance, on a shared host. |
| 31 |
| 32 In all these cases, ``virtualenv`` can help you. It creates an |
| 33 environment that has its own installation directories, that doesn't |
| 34 share libraries with other virtualenv environments (and optionally |
| 35 doesn't access the globally installed libraries either). |
| 36 |
| 37 .. comment: split here |
| 38 |
| 39 .. toctree:: |
| 40 :maxdepth: 2 |
| 41 |
| 42 installation |
| 43 userguide |
| 44 reference |
| 45 development |
| 46 changes |
| 47 |
| 48 .. warning:: |
| 49 |
| 50 Python bugfix releases 2.6.8, 2.7.3, 3.1.5 and 3.2.3 include a change that |
| 51 will cause "import random" to fail with "cannot import name urandom" on any |
| 52 virtualenv created on a Unix host with an earlier release of Python |
| 53 2.6/2.7/3.1/3.2, if the underlying system Python is upgraded. This is due to |
| 54 the fact that a virtualenv uses the system Python's standard library but |
| 55 contains its own copy of the Python interpreter, so an upgrade to the system |
| 56 Python results in a mismatch between the version of the Python interpreter |
| 57 and the version of the standard library. It can be fixed by removing |
| 58 ``$ENV/bin/python`` and re-running virtualenv on the same target directory |
| 59 with the upgraded Python. |
| 60 |
| 61 Other Documentation and Links |
| 62 ----------------------------- |
| 63 |
| 64 * `Blog announcement of virtualenv`__. |
| 65 |
| 66 .. __: http://blog.ianbicking.org/2007/10/10/workingenv-is-dead-long-live-virt
ualenv/ |
| 67 |
| 68 * James Gardner has written a tutorial on using `virtualenv with |
| 69 Pylons |
| 70 <http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox>`_
. |
| 71 |
| 72 * Chris Perkins created a `showmedo video including virtualenv |
| 73 <http://showmedo.com/videos/video?name=2910000&fromSeriesID=291>`_. |
| 74 |
| 75 * Doug Hellmann's `virtualenvwrapper`_ is a useful set of scripts to make |
| 76 your workflow with many virtualenvs even easier. `His initial blog post on it`
__. |
| 77 He also wrote `an example of using virtualenv to try IPython`__. |
| 78 |
| 79 .. _virtualenvwrapper: https://pypi.python.org/pypi/virtualenvwrapper/ |
| 80 .. __: http://www.doughellmann.com/articles/CompletelyDifferent-2008-05-virtua
lenvwrapper/index.html |
| 81 .. __: http://www.doughellmann.com/articles/CompletelyDifferent-2008-02-ipytho
n-and-virtualenv/index.html |
| 82 |
| 83 * `Pew`_ is another wrapper for virtualenv that makes use of a different |
| 84 activation technique. |
| 85 |
| 86 .. _Pew: https://pypi.python.org/pypi/pew/ |
| 87 |
| 88 * `Using virtualenv with mod_wsgi |
| 89 <http://code.google.com/p/modwsgi/wiki/VirtualEnvironments>`_. |
| 90 |
| 91 * `virtualenv commands |
| 92 <https://github.com/thisismedium/virtualenv-commands>`_ for some more |
| 93 workflow-related tools around virtualenv. |
| 94 |
| 95 * PyCon US 2011 talk: `Reverse-engineering Ian Bicking's brain: inside pip and v
irtualenv |
| 96 <http://pyvideo.org/video/568/reverse-engineering-ian-bicking--39-s-brain--ins
i>`_. |
| 97 By the end of the talk, you'll have a good idea exactly how pip |
| 98 and virtualenv do their magic, and where to go looking in the source |
| 99 for particular behaviors or bug fixes. |
| 100 |
| 101 Compare & Contrast with Alternatives |
| 102 ------------------------------------ |
| 103 |
| 104 There are several alternatives that create isolated environments: |
| 105 |
| 106 * ``workingenv`` (which I do not suggest you use anymore) is the |
| 107 predecessor to this library. It used the main Python interpreter, |
| 108 but relied on setting ``$PYTHONPATH`` to activate the environment. |
| 109 This causes problems when running Python scripts that aren't part of |
| 110 the environment (e.g., a globally installed ``hg`` or ``bzr``). It |
| 111 also conflicted a lot with Setuptools. |
| 112 |
| 113 * `virtual-python |
| 114 <http://peak.telecommunity.com/DevCenter/EasyInstall#creating-a-virtual-python
>`_ |
| 115 is also a predecessor to this library. It uses only symlinks, so it |
| 116 couldn't work on Windows. It also symlinks over the *entire* |
| 117 standard library and global ``site-packages``. As a result, it |
| 118 won't see new additions to the global ``site-packages``. |
| 119 |
| 120 This script only symlinks a small portion of the standard library |
| 121 into the environment, and so on Windows it is feasible to simply |
| 122 copy these files over. Also, it creates a new/empty |
| 123 ``site-packages`` and also adds the global ``site-packages`` to the |
| 124 path, so updates are tracked separately. This script also installs |
| 125 Setuptools automatically, saving a step and avoiding the need for |
| 126 network access. |
| 127 |
| 128 * `zc.buildout <http://pypi.python.org/pypi/zc.buildout>`_ doesn't |
| 129 create an isolated Python environment in the same style, but |
| 130 achieves similar results through a declarative config file that sets |
| 131 up scripts with very particular packages. As a declarative system, |
| 132 it is somewhat easier to repeat and manage, but more difficult to |
| 133 experiment with. ``zc.buildout`` includes the ability to setup |
| 134 non-Python systems (e.g., a database server or an Apache instance). |
| 135 |
| 136 I *strongly* recommend anyone doing application development or |
| 137 deployment use one of these tools. |
OLD | NEW |