Skip to content

Instantly share code, notes, and snippets.

@stasyao
Last active December 28, 2021 16:54
Show Gist options
  • Save stasyao/e6d710e1c0901d1ce6c45f5ee3fec068 to your computer and use it in GitHub Desktop.
Save stasyao/e6d710e1c0901d1ce6c45f5ee3fec068 to your computer and use it in GitHub Desktop.
Django

Поговорим о pip и виртуальном окружении

Вводное замечание: все команды написаны для консоли Git Bash под Windows 10. Кто не скачал, скачайте:
https://gitforwindows.org/

Кто на Линуксе, могут использовать те же команды, но с добавлением 3 к python и pip (python3 ..., pip3 ...). Это связано с тем, что, к примеру, в Ubuntu команда python запускает python 2-й версии (которая уже никем не используется), а python3 запускает python актуальной 3-й версии.

Что такое pip

Определение с официального сайта

pip is the package installer for Python. You can use pip to install packages from the Python Package Index and other indexes.

Итак, pip — это программа, которая позволяет устанавливать различные библиотеки (пакеты), которые разработчики размещают в Индексе Питоновских Пакетов (Python Package Index) и в других местах.

А кстати, что такое пакеты, библиотеки и модули?

Модуль — это по сути обычный файл с кодом на питоне. Этот файл импортируют в другие файлы, чтобы поделиться разными функциями и прочими сущностями из скрипта-модуля.

Допустим вы написали в текстовом редакторе def hello(): print('hello, world') и сохранили под названием hello.py. Всё, создан модуль. Это, кстати, хороший пример того, что вас окружает много на первый взгляд страшных слов (типа того же "модуля"), а на поверку всё оказывается очень просто. Нужно лишь привыкнуть к птичьему языку. Да, кстати, "скрипт" — это просто файл с кодом. Поэтому наш hello.py можно назвать и скриптом, и файлом, и модулем.

Как юрист, подкреплю свои слова выдержкой из официального туториала:

A module is a file containing Python definitions and statements.

И всё! Модуль — файл, который содержит инструкции и определения на языкe Python. К примеру, наш модуль hello.py содержит определение функции hello на языке Python.

Любой файл с кодом на питоне можно импортировать в другой файл на питоне. Но, разумеется, импортируют не все подряд, а только те файлы, где есть нужные для текущего файла функции, переменные и т.д. Модули импортируются с помощью инструкции import.

Когда на машину устанавливается Python-интерпретатор (штука, которая читает и исполняет Python-файлы) с ним сразу идёт "стандартная библиотека модулей" (Standard library).

Стандартная библиотека — это коллекция из нескольких десятков модулей с разными полезными функциями, упрощающими жизнь программисту, позволяя пользоваться уже готовыми инструментами. Например, модуль math, название которого говорит само за себя, модули os и Pathlib, которые позволяют с помощью кода на Python проводить разные манипуляции с файловой системой (и не только).

Важный момент: для установки модулей из стандартной библиотеки pip не нужен. Все эти модули уже есть на машине, их можно сразу импортировать в свой код.

Вот ещё несколько тезисов о модулях, пакетах, библиотеках (и ещё фреймворках) из большой статьи на learnpython:

  • пакет (package) — это всего-навсего коллекция модулей. Есть парочка python-файлов — всё, у нас пакет. Конечно, это достаточно упрощенно, эти файлы, конечно, должны служить какой-то общей задаче, но для общего понимания вполне пойдёт и такое простое представление. Усложнить всегда успеется.
  • пакеты могут содержать другие пакеты (собственно, как любая папка на нашей машине может содержать подпапки), тогда говорят о пакетах и субпакетах (subpackages). Т.е. главное понять, что пакеты (как и модули) это просто способ организации, распределения кода.
  • чтобы папка с python-файлами считалась пакетом в ней должен быть файл __init__.py. Он может быть (и зачастую бывает) пустым.

Картинка автора статьи об организации файлов (модулей) в субпакеты (training, submission, metrics) и общий пакет (my_model).

image

  • библиотека (library) — это не что иное как набор пакетов. Зачастую вообще эти понятия отождествляют. Не будет ошибкой сказать "я установил библиотеку requests" или "я установил пакет requests". Библиотека — это набор инструментов для решения какой-то задачи. Например, библиотека requests даёт нам инструменты для отправки интернет-запросов и обработки полученных ответов.

  • фреймворк (framework) — это тоже набор модулей и пакетов. В отличие от библиотеки, фреймворк — готовый каркас для реализации какого-то проекта. То есть тебе дан и каркас, и инструменты, дополняй нужными тебе деталями и получишь проект. Например, таким проектом может быть интернет-сайт. Соответственно фреймворки для создания сайтов называют веб-фреймворки, например, Django или Flask. Фреймворк даёт все необходимое, чтобы подключить и работать с базой данной для сайта, для работы с шаблонами страниц и т.д.

Так что же мы качаем с помощью pip?

С помощь pip мы устанавливаем (или наоборот удаляем) наборы python-файлов, объединенных в библиотеки (пакеты) или фреймворки, которые позволяют решать нам различные прикладные задачи. От суперкрупных и комплексных — создать сайт, до небольших и узконаправленных — конвертировать изображения из одного формата в другой.

Основные команды pip

pip install — установить пакет (библиотеку, фреймворк), после install указываем название пакета. Например, pip install Django.

pip freeze — вывести в терминал (консоль) список установленных пакетов. Чтобы вывести это в файл, нужно использовать специальный символ перенаправления потока вывода > и указать файл, куда выводить (если файла не существует, он будет создан автоматически). Пример: pip freeze > requirements.txt, расшифровывается так: "Собрать список всех установленных пакетов и записать их в файл requirements.txt".

pip install -r — установить пакеты, которые перечислены в файле, название файла указывается через пробел после -r. Например, pip install -r requirements.txt, расшифровывается так "установить все Python-пакеты, которые перечислены в файле requirements.txt".

pip show — показать информацию о пакете, после show указываем имя пакета. Например, pip show Django.

$ pip show Django
Name: Django
Version: 3.0.5
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: https://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: BSD
Location: c:\users\user\appdata\local\programs\python\python39\lib\site-packages
Requires: asgiref, pytz, sqlparse
Required-by: django-cors-headers, django-filter, djangorestframework, djangorestframework-simplejwt

Виртуальное окружение

На своей локальной машине мы можем создать десятки папок, в каждой из которых будет набор python-файлов, реализующих какую-то задачу. В одной папке у нас будут файлы для проекта калькулятора, в другой веб-сайт, в третьей игра и т.д. Мало какой проект обходится только инструментами из стандартной библиотеки (той самой, которая идёт с Python сразу и через pip устанавливать не надо).

Каждому проекту, скорее всего, понадобится набор пакетов (библиотек), скачиваемых через pip (ещё их часто называют зависимости (dependencies)). Но если пакеты для одного проекта не нужны в другом проекте, то зачем их устанавливать глобально? Кроме того, два разных проекта могут использовать одну и ту же библиотеку, но в разных версиях. Глобально же мы можем поставить какую-то одну.

Решение этих вопросов — виртуальное окружение проекта. Схема такая:

  1. в папке с нашим проектом создаём папку с виртуальным окружением
  2. активируем виртуальное окружение
  3. теперь всё что мы будем ставить через pip install будет доступно только в этом виртуальном окружении.

Как только мы выключим виртуальное окружение, мы не сможем работать с установленными пакетами.

Команды:

  1. python -m venv имя_папки_для_виртуального_окружения. Разберем по винтикам:
  • python — запускаем python-интерпретатор, т.е. говорим, что будет исполнять какой-то питоновский код
  • -m — этот флаг говорит о том, что запускаем мы не скрипт (файл) из текущей директории, а библиотечный модуль, который python будет искать, прежде всего, в своей стандартной библиотеке
  • venv — название модуля из стандартной библиотеки Python, который отвечает за создание виртуального окружения (https://docs.python.org/3/library/venv.html?highlight=venv#module-venv)
  • имя_папки_для_виртуального_окружения — любое имя на ваш выбор (часто выбирают env). В этой папке будет автоматически создан python-интерпретатор и туда же будут устанавливаться пакеты при активированном виртуальном окружении
  1. source имя_папки_для_виртуального_окружения/bin/activate — активируем виртуальное окружение в консоли git bash. (для линукса команда будет выглядеть так source имя_папки_для_виртуального_окружения/Scripts/activate)

  2. deactivate — деактивировать виртуальное окружение.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment