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