15
15
16
16
--------------
17
17
18
- The :mod: `venv ` module provides support for creating lightweight "virtual
19
- environments" with their own site directories, optionally isolated from system
20
- site directories. Each virtual environment has its own Python binary (which
21
- matches the version of the binary that was used to create this environment) and
22
- can have its own independent set of installed Python packages in its site
23
- directories.
18
+ .. _venv-def :
19
+ .. _venv-intro :
20
+
21
+ The :mod: `!venv ` module supports creating lightweight "virtual environments",
22
+ each with their own independent set of Python packages installed in
23
+ their :mod: `site ` directories.
24
+ A virtual environment is created on top of an existing
25
+ Python installation, known as the virtual environment's "base" Python, and may
26
+ optionally be isolated from the packages in the base environment,
27
+ so only those explicitly installed in the virtual environment are available.
28
+
29
+ When used from within a virtual environment, common installation tools such as
30
+ `pip `_ will install Python packages into a virtual environment
31
+ without needing to be told to do so explicitly.
24
32
25
- See :pep: `405 ` for more information about Python virtual environments.
33
+ See :pep: `405 ` for more background on Python virtual environments.
26
34
27
35
.. seealso ::
28
36
29
37
`Python Packaging User Guide: Creating and using virtual environments
30
38
<https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment> `__
31
39
40
+ .. include :: ../includes/wasm-notavail.rst
32
41
33
42
Creating virtual environments
34
43
-----------------------------
35
44
36
45
.. include :: /using/venv-create.inc
37
46
47
+ .. _venv-explanation :
38
48
39
- .. _venv-def :
49
+ How venvs work
50
+ --------------
40
51
41
- .. note :: A virtual environment is a Python environment such that the Python
42
- interpreter, libraries and scripts installed into it are isolated from those
43
- installed in other virtual environments, and (by default) any libraries
44
- installed in a "system" Python, i.e., one which is installed as part of your
45
- operating system.
46
-
47
- A virtual environment is a directory tree which contains Python executable
48
- files and other files which indicate that it is a virtual environment.
49
-
50
- Common installation tools such as setuptools _ and pip _ work as
51
- expected with virtual environments. In other words, when a virtual
52
- environment is active, they install Python packages into the virtual
53
- environment without needing to be told to do so explicitly.
54
-
55
- When a virtual environment is active (i.e., the virtual environment's Python
56
- interpreter is running), the attributes :attr: `sys.prefix ` and
57
- :attr: `sys.exec_prefix ` point to the base directory of the virtual
58
- environment, whereas :attr: `sys.base_prefix ` and
59
- :attr: `sys.base_exec_prefix ` point to the non-virtual environment Python
60
- installation which was used to create the virtual environment. If a virtual
61
- environment is not active, then :attr: `sys.prefix ` is the same as
62
- :attr: `sys.base_prefix ` and :attr: `sys.exec_prefix ` is the same as
63
- :attr: `sys.base_exec_prefix ` (they all point to a non-virtual environment
64
- Python installation).
65
-
66
- When a virtual environment is active, any options that change the
67
- installation path will be ignored from all :mod: `distutils ` configuration
68
- files to prevent projects being inadvertently installed outside of the
69
- virtual environment.
70
-
71
- When working in a command shell, users can make a virtual environment active
72
- by running an ``activate `` script in the virtual environment's executables
73
- directory (the precise filename and command to use the file is
74
- shell-dependent), which prepends the virtual environment's directory for
75
- executables to the ``PATH `` environment variable for the running shell. There
76
- should be no need in other circumstances to activate a virtual
77
- environment; scripts installed into virtual environments have a "shebang"
78
- line which points to the virtual environment's Python interpreter. This means
79
- that the script will run with that interpreter regardless of the value of
80
- ``PATH ``. On Windows, "shebang" line processing is supported if you have the
81
- Python Launcher for Windows installed (this was added to Python in 3.3 - see
82
- :pep: `397 ` for more details). Thus, double-clicking an installed script in a
83
- Windows Explorer window should run the script with the correct interpreter
84
- without there needing to be any reference to its virtual environment in
85
- ``PATH ``.
52
+ When a Python interpreter is running from a virtual environment,
53
+ :data: `sys.prefix ` and :data: `sys.exec_prefix `
54
+ point to the directories of the virtual environment,
55
+ whereas :data: `sys.base_prefix ` and :data: `sys.base_exec_prefix `
56
+ point to those of the base Python used to create the environment.
57
+ It is sufficient to check
58
+ ``sys.prefix == sys.base_prefix `` to determine if the current interpreter is
59
+ running from a virtual environment.
60
+
61
+ A virtual environment may be "activated" using a script in its binary directory
62
+ (``bin `` on POSIX; ``Scripts `` on Windows).
63
+ This will prepend that directory to your :envvar: `!PATH `, so that running
64
+ :program: `!python ` will invoke the environment's Python interpreter
65
+ and you can run installed scripts without having to use their full path.
66
+ The invocation of the activation script is platform-specific
67
+ (:samp: `{ <venv> } ` must be replaced by the path to the directory
68
+ containing the virtual environment):
69
+
70
+ +-------------+------------+--------------------------------------------------+
71
+ | Platform | Shell | Command to activate virtual environment |
72
+ +=============+============+==================================================+
73
+ | POSIX | bash/zsh | :samp: `$ source { <venv> } /bin/activate ` |
74
+ | +------------+--------------------------------------------------+
75
+ | | fish | :samp: `$ source { <venv> } /bin/activate.fish ` |
76
+ | +------------+--------------------------------------------------+
77
+ | | csh/tcsh | :samp: `$ source { <venv> } /bin/activate.csh ` |
78
+ | +------------+--------------------------------------------------+
79
+ | | PowerShell | :samp: `$ { <venv> } /bin/Activate.ps1 ` |
80
+ +-------------+------------+--------------------------------------------------+
81
+ | Windows | cmd.exe | :samp: `C:\\ > { <venv> } \\ Scripts\\ activate.bat ` |
82
+ | +------------+--------------------------------------------------+
83
+ | | PowerShell | :samp: `PS C:\\ > { <venv> } \\ Scripts\\ Activate.ps1 ` |
84
+ +-------------+------------+--------------------------------------------------+
85
+
86
+ .. versionadded :: 3.4
87
+ :program: `!fish ` and :program: `!csh ` activation scripts.
88
+
89
+ .. versionadded :: 3.8
90
+ PowerShell activation scripts installed under POSIX for PowerShell Core
91
+ support.
92
+
93
+ You don't specifically *need * to activate a virtual environment,
94
+ as you can just specify the full path to that environment's
95
+ Python interpreter when invoking Python.
96
+ Furthermore, all scripts installed in the environment
97
+ should be runnable without activating it.
98
+
99
+ In order to achieve this, scripts installed into virtual environments have
100
+ a "shebang" line which points to the environment's Python interpreter,
101
+ i.e. :samp: `#!/{ <path-to-venv> } /bin/python `.
102
+ This means that the script will run with that interpreter regardless of the
103
+ value of :envvar: `!PATH `. On Windows, "shebang" line processing is supported if
104
+ you have the :ref: `launcher ` installed. Thus, double-clicking an installed
105
+ script in a Windows Explorer window should run it with the correct interpreter
106
+ without the environment needing to be activated or on the :envvar: `!PATH `.
107
+
108
+ When a virtual environment has been activated, the :envvar: `!VIRTUAL_ENV `
109
+ environment variable is set to the path of the environment.
110
+ Since explicitly activating a virtual environment is not required to use it,
111
+ :envvar: `!VIRTUAL_ENV ` cannot be relied upon to determine
112
+ whether a virtual environment is being used.
86
113
87
114
.. warning :: Because scripts installed in environments should not expect the
88
115
environment to be activated, their shebang lines contain the absolute paths
@@ -98,6 +125,11 @@ Creating virtual environments
98
125
environment in its new location. Otherwise, software installed into the
99
126
environment may not work as expected.
100
127
128
+ You can deactivate a virtual environment by typing ``deactivate `` in your shell.
129
+ The exact mechanism is platform-specific and is an internal implementation
130
+ detail (typically, a script or shell function will be used).
131
+
132
+
101
133
.. _venv-api :
102
134
103
135
API
@@ -183,11 +215,56 @@ creation according to their needs, the :class:`EnvBuilder` class.
183
215
184
216
.. method :: ensure_directories(env_dir)
185
217
186
- Creates the environment directory and all necessary directories, and
187
- returns a context object. This is just a holder for attributes (such as
188
- paths), for use by the other methods. The directories are allowed to
189
- exist already, as long as either ``clear `` or ``upgrade `` were
190
- specified to allow operating on an existing environment directory.
218
+ Creates the environment directory and all necessary subdirectories that
219
+ don't already exist, and returns a context object. This context object
220
+ is just a holder for attributes (such as paths) for use by the other
221
+ methods. If the :class: `EnvBuilder ` is created with the arg
222
+ ``clear=True ``, contents of the environment directory will be cleared
223
+ and then all necessary subdirectories will be recreated.
224
+
225
+ The returned context object is a :class: `types.SimpleNamespace ` with the
226
+ following attributes:
227
+
228
+ * ``env_dir `` - The location of the virtual environment. Used for
229
+ ``__VENV_DIR__ `` in activation scripts (see :meth: `install_scripts `).
230
+
231
+ * ``env_name `` - The name of the virtual environment. Used for
232
+ ``__VENV_NAME__ `` in activation scripts (see :meth: `install_scripts `).
233
+
234
+ * ``prompt `` - The prompt to be used by the activation scripts. Used for
235
+ ``__VENV_PROMPT__ `` in activation scripts (see :meth: `install_scripts `).
236
+
237
+ * ``executable `` - The underlying Python executable used by the virtual
238
+ environment. This takes into account the case where a virtual environment
239
+ is created from another virtual environment.
240
+
241
+ * ``inc_path `` - The include path for the virtual environment.
242
+
243
+ * ``lib_path `` - The purelib path for the virtual environment.
244
+
245
+ * ``bin_path `` - The script path for the virtual environment.
246
+
247
+ * ``bin_name `` - The name of the script path relative to the virtual
248
+ environment location. Used for ``__VENV_BIN_NAME__ `` in activation
249
+ scripts (see :meth: `install_scripts `).
250
+
251
+ * ``env_exe `` - The name of the Python interpreter in the virtual
252
+ environment. Used for ``__VENV_PYTHON__ `` in activation scripts
253
+ (see :meth: `install_scripts `).
254
+
255
+ * ``env_exec_cmd `` - The name of the Python interpreter, taking into
256
+ account filesystem redirections. This can be used to run Python in
257
+ the virtual environment.
258
+
259
+
260
+ .. versionchanged :: 3.12
261
+ The attribute ``lib_path `` was added to the context, and the context
262
+ object was documented.
263
+
264
+ .. versionchanged :: 3.11
265
+ The *venv *
266
+ :ref: `sysconfig installation scheme <installation_paths >`
267
+ is used to construct the paths of the created directories.
191
268
192
269
.. method :: create_configuration(context)
193
270
0 commit comments