Основи Python и Django. / Урок 3. Кортежі. Словники. / Віртуальне оточення. Інсталятор PIP.

Встановлювач pip. Віртуальне оточення.

При розробці програм на Python часто виникає потреба в установці сторонніх бібліотек (пакетів), що не входять до постачання Python.

Після встановлення з’являється можливість їх імпорту та використання.

Встановити пакет python можна вручну, розпакувавши архів у потрібне місце.

Насамперед Python намагається знайти імпортовану бібліотеку в поточному каталозі.

Це можна перевірити, створивши файл бібліотеки mylib.py. print(‘Importing mylib’)

І в іншому файлі спробувати його імпортувати.

import mylib

Висновок.

shell>python imp.py 
Importing mymodule
shell>

Якщо файл покласти в каталог lib, наприклад, то імпорт буде наступним:

import lib.mylib

При цьому необхідно не забути створити в каталозі спеціальний файл init.py, який позначить цей каталог як пакет і уможливить імпорт із нього.

Установник pip полегшує завдання встановлення пакетів.

Він оперує репозиторієм пакетів на сайті https://pypi.org та тягне їх від туди.

Встановити їх у систему можна командою.

apt install python-pip

Після цього використання буде в такому форматі. Pislya tsʹoho vykorystannya bude v takomu formati.

pip install package_name1 package_name2

Ми можемо створити список усіх необхідних бібліотек у файлі requirements.txt (наприклад), перерахувавши їх у стовпчик.

packege_name1
package_name2

І потім скористатися ключем -r для передачі файлу-списку в інсталятор pip. pip install -r requirements.txt
Де ще Python шукає бібліотеки під час імпорту? Де ще Python шукає бібліотеки під час імпорту? Переглянути всі шляхи якими проходить пошук можна в змінній PYTHONPATH, використовуючи модуль sys.

Цей модуль безпосередньо взаємодіє з інтерпретатором Python.

import sys
print(sys.path)

Можна запустити однією командою прямо з консолі bash.

python -c "import sys; print('\n'.join(sys.path))"

Вывод

/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/home/zdimon/.local/lib/python2.7/site-packages
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
/usr/lib/python2.7/dist-packages/wx-3.0-gtk2

Як бачимо майже всі шляхи є системними та прав на запис у них має лише привелигеровані користувачі.

Тому при спробі просто встановити якийсь пакет запустивши, наприклад,

pip install markdown

Ви отримаєте помилку прав доступу, оскільки поточний користувач не може писати в /usr/local/lib/python2.7/dist-packages.

ERROR: Could not install packages due to an EnvironmentError: 
[Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/markdown

Вихід із цієї ситуації - це змінити змінну оточення інтерпретатора sys.path, вказавши у ньому шлях нашого проекту замість системних шляхів.

Це забезпечує таку програму як virtualenv.

Установка

apt install virtualenv

Створення віртуального оточення.

virtualenv venv # python 2

virtualenv -p python3 venv  # python 3

При цьому venv - довільне ім’я папки, яка створюється в поточній директорії.

Зазвичай її створюють поруч із директорією проекту, чи всередині неї.

Після створення цієї директорії необхідно запустити bash скрипт activate із каталогу venv/bin.

Саме він і змінюватиме шляхи в sys.path до наших залежностей.

Після активації ми побачимо префікс (venv) у командному рядку консолі, що означає те, що тепер під час використання pip установника він ставитиме пакети не в системні каталоги, а всередину нашого віртуального оточення. Це каталог venv/lib/python3.5/site-packages/.