17db96d56Sopenharmony_ci
27db96d56Sopenharmony_ci.. _tut-venv:
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci*********************************
57db96d56Sopenharmony_ciVirtual Environments and Packages
67db96d56Sopenharmony_ci*********************************
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciIntroduction
97db96d56Sopenharmony_ci============
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciPython applications will often use packages and modules that don't
127db96d56Sopenharmony_cicome as part of the standard library.  Applications will sometimes
137db96d56Sopenharmony_cineed a specific version of a library, because the application may
147db96d56Sopenharmony_cirequire that a particular bug has been fixed or the application may be
157db96d56Sopenharmony_ciwritten using an obsolete version of the library's interface.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciThis means it may not be possible for one Python installation to meet
187db96d56Sopenharmony_cithe requirements of every application.  If application A needs version
197db96d56Sopenharmony_ci1.0 of a particular module but application B needs version 2.0, then
207db96d56Sopenharmony_cithe requirements are in conflict and installing either version 1.0 or 2.0
217db96d56Sopenharmony_ciwill leave one application unable to run.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciThe solution for this problem is to create a :term:`virtual environment`, a
247db96d56Sopenharmony_ciself-contained directory tree that contains a Python installation for a
257db96d56Sopenharmony_ciparticular version of Python, plus a number of additional packages.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ciDifferent applications can then use different virtual environments.
287db96d56Sopenharmony_ciTo resolve the earlier example of conflicting requirements,
297db96d56Sopenharmony_ciapplication A can have its own virtual environment with version 1.0
307db96d56Sopenharmony_ciinstalled while application B has another virtual environment with version 2.0.
317db96d56Sopenharmony_ciIf application B requires a library be upgraded to version 3.0, this will
327db96d56Sopenharmony_cinot affect application A's environment.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ciCreating Virtual Environments
367db96d56Sopenharmony_ci=============================
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciThe module used to create and manage virtual environments is called
397db96d56Sopenharmony_ci:mod:`venv`.  :mod:`venv` will usually install the most recent version of
407db96d56Sopenharmony_ciPython that you have available. If you have multiple versions of Python on your
417db96d56Sopenharmony_cisystem, you can select a specific Python version by running ``python3`` or
427db96d56Sopenharmony_ciwhichever version you want.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciTo create a virtual environment, decide upon a directory where you want to
457db96d56Sopenharmony_ciplace it, and run the :mod:`venv` module as a script with the directory path::
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci   python -m venv tutorial-env
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciThis will create the ``tutorial-env`` directory if it doesn't exist,
507db96d56Sopenharmony_ciand also create directories inside it containing a copy of the Python
517db96d56Sopenharmony_ciinterpreter and various supporting files.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ciA common directory location for a virtual environment is ``.venv``.
547db96d56Sopenharmony_ciThis name keeps the directory typically hidden in your shell and thus
557db96d56Sopenharmony_ciout of the way while giving it a name that explains why the directory
567db96d56Sopenharmony_ciexists. It also prevents clashing with ``.env`` environment variable
577db96d56Sopenharmony_cidefinition files that some tooling supports.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ciOnce you've created a virtual environment, you may activate it.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ciOn Windows, run::
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci  tutorial-env\Scripts\activate.bat
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ciOn Unix or MacOS, run::
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci  source tutorial-env/bin/activate
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci(This script is written for the bash shell.  If you use the
707db96d56Sopenharmony_ci:program:`csh` or :program:`fish` shells, there are alternate
717db96d56Sopenharmony_ci``activate.csh`` and ``activate.fish`` scripts you should use
727db96d56Sopenharmony_ciinstead.)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciActivating the virtual environment will change your shell's prompt to show what
757db96d56Sopenharmony_civirtual environment you're using, and modify the environment so that running
767db96d56Sopenharmony_ci``python`` will get you that particular version and installation of Python.
777db96d56Sopenharmony_ciFor example:
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci.. code-block:: bash
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci  $ source ~/envs/tutorial-env/bin/activate
827db96d56Sopenharmony_ci  (tutorial-env) $ python
837db96d56Sopenharmony_ci  Python 3.5.1 (default, May  6 2016, 10:59:36)
847db96d56Sopenharmony_ci    ...
857db96d56Sopenharmony_ci  >>> import sys
867db96d56Sopenharmony_ci  >>> sys.path
877db96d56Sopenharmony_ci  ['', '/usr/local/lib/python35.zip', ...,
887db96d56Sopenharmony_ci  '~/envs/tutorial-env/lib/python3.5/site-packages']
897db96d56Sopenharmony_ci  >>>
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ciTo deactivate a virtual environment, type::
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci    deactivate
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciinto the terminal.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ciManaging Packages with pip
987db96d56Sopenharmony_ci==========================
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ciYou can install, upgrade, and remove packages using a program called
1017db96d56Sopenharmony_ci:program:`pip`.  By default ``pip`` will install packages from the `Python
1027db96d56Sopenharmony_ciPackage Index <https://pypi.org>`_.  You can browse the Python
1037db96d56Sopenharmony_ciPackage Index by going to it in your web browser.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci``pip`` has a number of subcommands: "install", "uninstall",
1067db96d56Sopenharmony_ci"freeze", etc.  (Consult the :ref:`installing-index` guide for
1077db96d56Sopenharmony_cicomplete documentation for ``pip``.)
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciYou can install the latest version of a package by specifying a package's name:
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci.. code-block:: bash
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip install novas
1147db96d56Sopenharmony_ci  Collecting novas
1157db96d56Sopenharmony_ci    Downloading novas-3.1.1.3.tar.gz (136kB)
1167db96d56Sopenharmony_ci  Installing collected packages: novas
1177db96d56Sopenharmony_ci    Running setup.py install for novas
1187db96d56Sopenharmony_ci  Successfully installed novas-3.1.1.3
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ciYou can also install a specific version of a package by giving the
1217db96d56Sopenharmony_cipackage name  followed by ``==`` and the version number:
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci.. code-block:: bash
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip install requests==2.6.0
1267db96d56Sopenharmony_ci  Collecting requests==2.6.0
1277db96d56Sopenharmony_ci    Using cached requests-2.6.0-py2.py3-none-any.whl
1287db96d56Sopenharmony_ci  Installing collected packages: requests
1297db96d56Sopenharmony_ci  Successfully installed requests-2.6.0
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ciIf you re-run this command, ``pip`` will notice that the requested
1327db96d56Sopenharmony_civersion is already installed and do nothing.  You can supply a
1337db96d56Sopenharmony_cidifferent version number to get that version, or you can run ``python
1347db96d56Sopenharmony_ci-m pip install --upgrade`` to upgrade the package to the latest version:
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci.. code-block:: bash
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip install --upgrade requests
1397db96d56Sopenharmony_ci  Collecting requests
1407db96d56Sopenharmony_ci  Installing collected packages: requests
1417db96d56Sopenharmony_ci    Found existing installation: requests 2.6.0
1427db96d56Sopenharmony_ci      Uninstalling requests-2.6.0:
1437db96d56Sopenharmony_ci        Successfully uninstalled requests-2.6.0
1447db96d56Sopenharmony_ci  Successfully installed requests-2.7.0
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci``python -m pip uninstall`` followed by one or more package names will
1477db96d56Sopenharmony_ciremove the packages from the virtual environment.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci``python -m pip show`` will display information about a particular package:
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci.. code-block:: bash
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip show requests
1547db96d56Sopenharmony_ci  ---
1557db96d56Sopenharmony_ci  Metadata-Version: 2.0
1567db96d56Sopenharmony_ci  Name: requests
1577db96d56Sopenharmony_ci  Version: 2.7.0
1587db96d56Sopenharmony_ci  Summary: Python HTTP for Humans.
1597db96d56Sopenharmony_ci  Home-page: http://python-requests.org
1607db96d56Sopenharmony_ci  Author: Kenneth Reitz
1617db96d56Sopenharmony_ci  Author-email: me@kennethreitz.com
1627db96d56Sopenharmony_ci  License: Apache 2.0
1637db96d56Sopenharmony_ci  Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
1647db96d56Sopenharmony_ci  Requires:
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci``python -m pip list`` will display all of the packages installed in
1677db96d56Sopenharmony_cithe virtual environment:
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci.. code-block:: bash
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip list
1727db96d56Sopenharmony_ci  novas (3.1.1.3)
1737db96d56Sopenharmony_ci  numpy (1.9.2)
1747db96d56Sopenharmony_ci  pip (7.0.3)
1757db96d56Sopenharmony_ci  requests (2.7.0)
1767db96d56Sopenharmony_ci  setuptools (16.0)
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci``python -m pip freeze`` will produce a similar list of the installed packages,
1797db96d56Sopenharmony_cibut the output uses the format that ``python -m pip install`` expects.
1807db96d56Sopenharmony_ciA common convention is to put this list in a ``requirements.txt`` file:
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci.. code-block:: bash
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip freeze > requirements.txt
1857db96d56Sopenharmony_ci  (tutorial-env) $ cat requirements.txt
1867db96d56Sopenharmony_ci  novas==3.1.1.3
1877db96d56Sopenharmony_ci  numpy==1.9.2
1887db96d56Sopenharmony_ci  requests==2.7.0
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ciThe ``requirements.txt`` can then be committed to version control and
1917db96d56Sopenharmony_cishipped as part of an application.  Users can then install all the
1927db96d56Sopenharmony_cinecessary packages with ``install -r``:
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci.. code-block:: bash
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci  (tutorial-env) $ python -m pip install -r requirements.txt
1977db96d56Sopenharmony_ci  Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
1987db96d56Sopenharmony_ci    ...
1997db96d56Sopenharmony_ci  Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
2007db96d56Sopenharmony_ci    ...
2017db96d56Sopenharmony_ci  Collecting requests==2.7.0 (from -r requirements.txt (line 3))
2027db96d56Sopenharmony_ci    ...
2037db96d56Sopenharmony_ci  Installing collected packages: novas, numpy, requests
2047db96d56Sopenharmony_ci    Running setup.py install for novas
2057db96d56Sopenharmony_ci  Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci``pip`` has many more options.  Consult the :ref:`installing-index`
2087db96d56Sopenharmony_ciguide for complete documentation for ``pip``.  When you've written
2097db96d56Sopenharmony_cia package and want to make it available on the Python Package Index,
2107db96d56Sopenharmony_ciconsult the :ref:`distributing-index` guide.
211