12. Віртуальні середовища та пакети¶
12.1. вступ¶
Програми Python часто використовують пакети та модулі, які не є частиною стандартної бібліотеки. Програмам іноді потрібна конкретна версія бібліотеки, тому що програма може вимагати виправлення певної помилки або програма може бути написана з використанням застарілої версії інтерфейсу бібліотеки.
Це означає, що одна установка Python може не відповідати вимогам кожної програми. Якщо програмі A потрібна версія 1.0 певного модуля, а програмі B потрібна версія 2.0, тоді вимоги суперечать, і встановлення версії 1.0 або 2.0 призведе до того, що одна програма не зможе працювати.
Рішенням цієї проблеми є створення virtual environment, самостійного дерева каталогів, яке містить інсталяцію Python для певної версії Python, а також низку додаткових пакетів.
Тоді різні програми можуть використовувати різні віртуальні середовища. Щоб вирішити попередній приклад суперечливих вимог, програма A може мати власне віртуальне середовище з версією 1.0, а програма B має інше віртуальне середовище з версією 2.0. Якщо програма B потребує оновлення бібліотеки до версії 3.0, це не вплине на середовище програми A.
12.2. Створення віртуальних середовищ¶
The module used to create and manage virtual environments is called
venv
. venv
will usually install the most recent version of
Python that you have available. If you have multiple versions of Python on your
system, you can select a specific Python version by running python3
or
whichever version you want.
Щоб створити віртуальне середовище, виберіть каталог, куди ви хочете його розмістити, і запустіть модуль venv
як сценарій із шляхом до каталогу:
python -m venv tutorial-env
Це створить каталог tutorial-env
, якщо він не існує, а також створить каталоги всередині нього, що містять копію інтерпретатора Python і різні допоміжні файли.
Загальним розташуванням каталогу для віртуального середовища є .venv
. Ця назва зберігає каталог, як правило, прихованим у вашій оболонці і, таким чином, не заважаючи, водночас надаючи йому назву, яка пояснює, чому каталог існує. Це також запобігає зіткненню з файлами визначення змінних середовища .env
, які підтримують деякі інструменти.
Створивши віртуальне середовище, ви можете його активувати.
У Windows запустіть:
tutorial-env\Scripts\activate.bat
В Unix або MacOS запустіть:
source tutorial-env/bin/activate
(Цей сценарій написаний для оболонки bash. Якщо ви використовуєте оболонки csh або fish, існують альтернативні сценарії activate.csh
і activate.fish
, які вам слід використовувати замість цього.)
Активація віртуального середовища змінить підказку вашої оболонки, щоб показати, яке віртуальне середовище ви використовуєте, і змінить середовище таким чином, що запуск python
дасть вам цю конкретну версію та інсталяцію Python. Наприклад:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
To deactivate a virtual environment, type:
deactivate
into the terminal.
12.3. Керування пакетами за допомогою pip¶
You can install, upgrade, and remove packages using a program called
pip. By default pip
will install packages from the Python
Package Index. You can browse the Python
Package Index by going to it in your web browser.
pip
має низку підкоманд: «встановити», «видалити», «заморозити» тощо. (Зверніться до посібника Встановлення модулів Python, щоб отримати повну документацію для pip
.)
Ви можете встановити останню версію пакета, вказавши назву пакета:
(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
Ви також можете встановити певну версію пакета, вказавши ім’я пакета, а потім ==
і номер версії:
(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
If you re-run this command, pip
will notice that the requested
version is already installed and do nothing. You can supply a
different version number to get that version, or you can run python
-m pip install --upgrade
to upgrade the package to the latest version:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
python -m pip uninstall
followed by one or more package names will
remove the packages from the virtual environment.
python -m pip show
will display information about a particular package:
(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
python -m pip list
will display all of the packages installed in
the virtual environment:
(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
python -m pip freeze
will produce a similar list of the installed packages,
but the output uses the format that python -m pip install
expects.
A common convention is to put this list in a requirements.txt
file:
(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
Після цього requirements.txt
можна закріпити для контролю версій і відправити як частину програми. Потім користувачі можуть інсталювати всі необхідні пакети за допомогою install -r
:
(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
has many more options. Consult the Встановлення модулів Python
guide for complete documentation for pip
. When you’ve written
a package and want to make it available on the Python Package Index,
consult the Python packaging user guide.