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 |