blob: dc4136e42a887d09f0093241dfc3c76a7ed1964b [file] [log] [blame]
Andrew Kuchlingdd15b362015-06-08 17:35:45 -04001
2.. _tut-venv:
3
4*********************************
5Virtual Environments and Packages
6*********************************
7
8Introduction
9============
10
11Python applications will often use packages and modules that don't
12come as part of the standard library. Applications will sometimes
13need a specific version of a library, because the application may
14require that a particular bug has been fixed or the application may be
15written using an obsolete version of the library's interface.
16
17This means it may not be possible for one Python installation to meet
18the requirements of every application. If application A needs version
191.0 of a particular module but application B needs version 2.0, then
20the requirements are in conflict and installing either version 1.0 or 2.0
21will leave one application unable to run.
22
Brett Cannon15552c32016-07-08 10:46:21 -070023The solution for this problem is to create a :term:`virtual environment`, a
24self-contained directory tree that contains a Python installation for a
25particular version of Python, plus a number of additional packages.
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040026
27Different applications can then use different virtual environments.
28To resolve the earlier example of conflicting requirements,
29application A can have its own virtual environment with version 1.0
Brett Cannon15552c32016-07-08 10:46:21 -070030installed while application B has another virtual environment with version 2.0.
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040031If application B requires a library be upgraded to version 3.0, this will
32not affect application A's environment.
33
34
35Creating Virtual Environments
36=============================
37
Brett Cannon15552c32016-07-08 10:46:21 -070038The module used to create and manage virtual environments is called
39:mod:`venv`. :mod:`venv` will usually install the most recent version of
40Python that you have available. If you have multiple versions of Python on your
41system, you can select a specific Python version by running ``python3`` or
42whichever version you want.
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040043
Brett Cannon15552c32016-07-08 10:46:21 -070044To create a virtual environment, decide upon a directory where you want to
45place it, and run the :mod:`venv` module as a script with the directory path::
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040046
Brett Cannon15552c32016-07-08 10:46:21 -070047 python3 -m venv tutorial-env
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040048
49This will create the ``tutorial-env`` directory if it doesn't exist,
50and also create directories inside it containing a copy of the Python
Andrew Kuchlingd0040712015-06-08 18:17:06 -040051interpreter, the standard library, and various supporting files.
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040052
Brett Cannon15552c32016-07-08 10:46:21 -070053Once you've created a virtual environment, you may activate it.
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040054
55On Windows, run::
56
Brett Cannon15552c32016-07-08 10:46:21 -070057 tutorial-env\Scripts\activate.bat
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040058
59On Unix or MacOS, run::
60
61 source tutorial-env/bin/activate
62
63(This script is written for the bash shell. If you use the
64:program:`csh` or :program:`fish` shells, there are alternate
65``activate.csh`` and ``activate.fish`` scripts you should use
66instead.)
67
Brett Cannon15552c32016-07-08 10:46:21 -070068Activating the virtual environment will change your shell's prompt to show what
69virtual environment you're using, and modify the environment so that running
70``python`` will get you that particular version and installation of Python.
71For example:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040072
Brett Cannon15552c32016-07-08 10:46:21 -070073.. code-block:: bash
74
75 $ source ~/envs/tutorial-env/bin/activate
76 (tutorial-env) $ python
77 Python 3.5.1 (default, May 6 2016, 10:59:36)
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040078 ...
79 >>> import sys
80 >>> sys.path
Brett Cannon15552c32016-07-08 10:46:21 -070081 ['', '/usr/local/lib/python35.zip', ...,
82 '~/envs/tutorial-env/lib/python3.5/site-packages']
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040083 >>>
84
85
86Managing Packages with pip
87==========================
88
Brett Cannon15552c32016-07-08 10:46:21 -070089You can install, upgrade, and remove packages using a program called
90:program:`pip`. By default ``pip`` will install packages from the Python
Stéphane Wirtel19177fb2018-05-15 20:58:35 +020091Package Index, <https://pypi.org>. You can browse the Python
Brett Cannon15552c32016-07-08 10:46:21 -070092Package Index by going to it in your web browser, or you can use ``pip``'s
93limited search feature:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040094
Brett Cannon15552c32016-07-08 10:46:21 -070095.. code-block:: bash
96
97 (tutorial-env) $ pip search astronomy
Andrew Kuchlingdd15b362015-06-08 17:35:45 -040098 skyfield - Elegant astronomy for Python
99 gary - Galactic astronomy and gravitational dynamics.
100 novas - The United States Naval Observatory NOVAS astronomy library
101 astroobs - Provides astronomy ephemeris to plan telescope observations
102 PyAstronomy - A collection of astronomy related tools for Python.
103 ...
104
105``pip`` has a number of subcommands: "search", "install", "uninstall",
106"freeze", etc. (Consult the :ref:`installing-index` guide for
107complete documentation for ``pip``.)
108
Brett Cannon15552c32016-07-08 10:46:21 -0700109You can install the latest version of a package by specifying a package's name:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400110
Brett Cannon15552c32016-07-08 10:46:21 -0700111.. code-block:: bash
112
113 (tutorial-env) $ pip install novas
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400114 Collecting novas
115 Downloading novas-3.1.1.3.tar.gz (136kB)
116 Installing collected packages: novas
117 Running setup.py install for novas
118 Successfully installed novas-3.1.1.3
119
120You can also install a specific version of a package by giving the
Brett Cannon15552c32016-07-08 10:46:21 -0700121package name followed by ``==`` and the version number:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400122
Brett Cannon15552c32016-07-08 10:46:21 -0700123.. code-block:: bash
124
125 (tutorial-env) $ pip install requests==2.6.0
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400126 Collecting requests==2.6.0
127 Using cached requests-2.6.0-py2.py3-none-any.whl
128 Installing collected packages: requests
129 Successfully installed requests-2.6.0
130
131If you re-run this command, ``pip`` will notice that the requested
132version is already installed and do nothing. You can supply a
133different version number to get that version, or you can run ``pip
Brett Cannon15552c32016-07-08 10:46:21 -0700134install --upgrade`` to upgrade the package to the latest version:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400135
Brett Cannon15552c32016-07-08 10:46:21 -0700136.. code-block:: bash
137
138 (tutorial-env) $ pip install --upgrade requests
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400139 Collecting requests
140 Installing collected packages: requests
141 Found existing installation: requests 2.6.0
142 Uninstalling requests-2.6.0:
143 Successfully uninstalled requests-2.6.0
144 Successfully installed requests-2.7.0
145
146``pip uninstall`` followed by one or more package names will remove the
147packages from the virtual environment.
148
Brett Cannon15552c32016-07-08 10:46:21 -0700149``pip show`` will display information about a particular package:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400150
Brett Cannon15552c32016-07-08 10:46:21 -0700151.. code-block:: bash
152
153 (tutorial-env) $ pip show requests
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400154 ---
155 Metadata-Version: 2.0
156 Name: requests
157 Version: 2.7.0
158 Summary: Python HTTP for Humans.
159 Home-page: http://python-requests.org
160 Author: Kenneth Reitz
161 Author-email: me@kennethreitz.com
162 License: Apache 2.0
163 Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
164 Requires:
165
166``pip list`` will display all of the packages installed in the virtual
Brett Cannon15552c32016-07-08 10:46:21 -0700167environment:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400168
Brett Cannon15552c32016-07-08 10:46:21 -0700169.. code-block:: bash
170
171 (tutorial-env) $ pip list
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400172 novas (3.1.1.3)
173 numpy (1.9.2)
174 pip (7.0.3)
175 requests (2.7.0)
176 setuptools (16.0)
177
178``pip freeze`` will produce a similar list of the installed packages,
179but the output uses the format that ``pip install`` expects.
Brett Cannon15552c32016-07-08 10:46:21 -0700180A common convention is to put this list in a ``requirements.txt`` file:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400181
Brett Cannon15552c32016-07-08 10:46:21 -0700182.. code-block:: bash
183
184 (tutorial-env) $ pip freeze > requirements.txt
185 (tutorial-env) $ cat requirements.txt
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400186 novas==3.1.1.3
187 numpy==1.9.2
188 requests==2.7.0
189
190The ``requirements.txt`` can then be committed to version control and
191shipped as part of an application. Users can then install all the
Brett Cannon15552c32016-07-08 10:46:21 -0700192necessary packages with ``install -r``:
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400193
Brett Cannon15552c32016-07-08 10:46:21 -0700194.. code-block:: bash
195
196 (tutorial-env) $ pip install -r requirements.txt
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400197 Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
198 ...
199 Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
200 ...
201 Collecting requests==2.7.0 (from -r requirements.txt (line 3))
202 ...
203 Installing collected packages: novas, numpy, requests
204 Running setup.py install for novas
205 Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
206
207``pip`` has many more options. Consult the :ref:`installing-index`
208guide for complete documentation for ``pip``. When you've written
Tal Einatf330d532015-06-09 18:40:16 +0300209a package and want to make it available on the Python Package Index,
Andrew Kuchlingdd15b362015-06-08 17:35:45 -0400210consult the :ref:`distributing-index` guide.