1515
1616-------------- 
1717
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.
2428
25- See :pep: `405 ` for more information about Python virtual environments.
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.
32+ 
33+ See :pep: `405 ` for more background on Python virtual environments.
2634
2735.. seealso ::
2836
@@ -36,54 +44,72 @@ Creating virtual environments
3644
3745.. include :: /using/venv-create.inc 
3846
47+ .. _venv-explanation :
3948
40- .. _venv-def :
49+ How venvs work
50+ -------------- 
4151
42- .. note :: A virtual environment is a Python environment such that the Python 
43-    interpreter, libraries and scripts installed into it are isolated from those
44-    installed in other virtual environments, and (by default) any libraries
45-    installed in a "system" Python, i.e., one which is installed as part of your
46-    operating system.
47- 
48-    A virtual environment is a directory tree which contains Python executable
49-    files and other files which indicate that it is a virtual environment.
50- 
51-    Common installation tools such as setuptools _ and pip _ work as
52-    expected with virtual environments. In other words, when a virtual
53-    environment is active, they install Python packages into the virtual
54-    environment without needing to be told to do so explicitly.
55- 
56-    When a virtual environment is active (i.e., the virtual environment's Python
57-    interpreter is running), the attributes :attr: `sys.prefix ` and
58-    :attr: `sys.exec_prefix ` point to the base directory of the virtual
59-    environment, whereas :attr: `sys.base_prefix ` and
60-    :attr: `sys.base_exec_prefix ` point to the non-virtual environment Python
61-    installation which was used to create the virtual environment. If a virtual
62-    environment is not active, then :attr: `sys.prefix ` is the same as
63-    :attr: `sys.base_prefix ` and :attr: `sys.exec_prefix ` is the same as
64-    :attr: `sys.base_exec_prefix ` (they all point to a non-virtual environment
65-    Python installation).
66- 
67-    When a virtual environment is active, any options that change the
68-    installation path will be ignored from all ``setuptools `` configuration
69-    files to prevent projects being inadvertently installed outside of the
70-    virtual environment.
71- 
72-    When working in a command shell, users can make a virtual environment active
73-    by running an ``activate `` script in the virtual environment's executables
74-    directory (the precise filename and command to use the file is
75-    shell-dependent), which prepends the virtual environment's directory for
76-    executables to the ``PATH `` environment variable for the running shell. There
77-    should be no need in other circumstances to activate a virtual
78-    environment; scripts installed into virtual environments have a "shebang"
79-    line which points to the virtual environment's Python interpreter. This means
80-    that the script will run with that interpreter regardless of the value of
81-    ``PATH ``. On Windows, "shebang" line processing is supported if you have the
82-    Python Launcher for Windows installed (this was added to Python in 3.3 - see
83-    :pep: `397 ` for more details). Thus, double-clicking an installed script in a
84-    Windows Explorer window should run the script with the correct interpreter
85-    without there needing to be any reference to its virtual environment in
86-    ``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> } 
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.
87113
88114.. warning :: Because scripts installed in environments should not expect the 
89115   environment to be activated, their shebang lines contain the absolute paths
@@ -99,6 +125,11 @@ Creating virtual environments
99125   environment in its new location. Otherwise, software installed into the
100126   environment may not work as expected.
101127
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+ 
102133.. _venv-api :
103134
104135API
0 commit comments