При работе с проектами в Python рекомендуется использовать виртуальную среду разработки (или какой-нибудь другой подобный механизм). Это нужно для того, чтобы изолировать устанавливаемые пакеты для каждого отдельного проекта.
Дополнительная информация
Если вы уже знакомы с виртуальными средами разработки, знаете как их создавать и использовать, то вы можете свободно пропустить данный раздел. 🤓
Подсказка
Виртуальная среда и переменная окружения это две разные вещи.
Переменная окружения это системная переменная, которую могут использовать программы.
Виртуальная среда это папка, содержащая файлы.
Дополнительная информация
В этом разделе мы научим вас пользоваться виртуальными средами разработки и расскажем, как они работают.
Если же вы готовы воспользоваться инструментом, который умеет управлять всем, что касается Python-проектов,
(включая установку Python), то попробуйте uv.
В первую очередь, создайте директорию для вашего проекта.
Я обычно создаю папку под названием code внутри моего домашнего каталога /home/user.
Затем внутри данной папки я создаю отдельную директорию под каждый свой проект.
fast →💬 Перейдите в домашний каталогcd💬 Создайте отдельную папку под все будущие программные проекты (code)mkdir code💬 Войдите в директорию codecd code💬 Создайте директрорию под данный проект (awesome-project)mkdir awesome-project💬 Перейдите в созданную директорию проектаcd awesome-project restart ↻
Проверьте, активна ли виртуальная среда (удостоверимся, что предыдущая команда сработала).
Подсказка
Убедитесь в том, что все работает так, как нужно и вы используете именно ту виртуальную среду разработки, которую нужно. Делать это необязательно, но желательно.
fast →which python /home/user/code/awesome-project/.venv/bin/python
Если данная команда показывает, что исполняемый файл python (.venv\bin\python), находится внутри виртуальной среды вашего проекта (у нас это awesome-project), значит все отработало как нужно. 🎉
fast →Get-Command python C:\Users\user\code\awesome-project\.venv\Scripts\python
Если данная команда показывает, что исполняемый файл python (.venv\Scripts\python), находится внутри виртуальной среды вашего проекта (у нас это awesome-project), значит все отработало как нужно. 🎉
Если вы торопитесь и не хотите объявлять зависимости проекта в отдельном файле, то вы можете установить их напрямую.
Подсказка
Объявление пакетов, которые использует ваш проект, и их версий в отдельном файле (например, в requirements.txt или в pyproject.toml) - это отличная идея.
После активации виртуальной среды разработки вы можете запустить свою программу и она будет использовать версию Python и пакеты, установленные в виртуальной среде.
Вероятно, вы захотите воспользоваться редактором. Убедитесь, что вы настроили его на использование той самой виртуальной среды, которую вы создали. (Скорее всего, она автоматически будет обнаружена). Это позволит вам использовать авто-завершение и выделение ошибок в редакторе.
Таким образом, при запуске python, будет использована версия python установленная глобально, а не из этой виртуальной среды вместе с установленными в ней пакетами.
Так в чем же проблема с установкой пакетов в глобальную среду Python?
В какой-то момент вам, вероятно, придется писать множество разных программ, которые используют различные пакеты. 😱
Например, вы создаете проект philosophers-stone, который зависит от пакета под названием harry, версии 1. Таким образом, вам нужно установить harry.
Затем, в какой-то момент, вы создаете другой проект под названием prisoner-of-azkaban, и этот проект тоже зависит от harry, но он уже использует harry версии 3.
Проблема заключается в том, что при установке в глобальное окружение, а не в локальную виртуальную среду разработки, вам нужно будет выбирать, какую версию пакета harry устанавливать.
Если вам нужен philosophers-stone, то вам нужно сначала установить harry версии 1:
И тогда в вашем глобальном окружении Python будет установлен harry версии 1:
Но если позднее вы захотите запустить prisoner-of-azkaban, то вам нужно будет удалить harry версии 1, и установить harry версии 3 (при установке пакета версии 3 поверх пакета версии 1, пакет версии 1 удаляется автоматически).
И тогда, в вашей глобальной среде окружения Python, будет установлен пакет harry версии 3.
И когда вы снова попытаетесь запустить philosophers-stone, то существует вероятность того, что он не будет работать, так как он использует harry версии 1.
Подсказка
В пакетах Python очень часто стараются изо всех сил избегать внесения критических изменений в новые версии, но лучше перестраховаться и планово устанавливать новые версии, а затем запускать тесты, чтобы проверить, все ли работает правильно.
Теперь представьте, что это происходит со многими другими пакетами, которые используются в ваших проектах. С этим очень сложно справиться. И скорее всего, в конечном итоге вы будете запускать некоторые проекты с некоторыми несовместимыми зависимостями и не будете знать, почему что-то не работает.
Кроме того, в зависимости от вашей операционной системы (напр. Linux, Windows, macOS), она может поставляться с уже установленным Python. Вероятно, что в этом случае в ней уже установлены системные пакеты определенных версий. Если вы устанавливаете пакеты глобально, то вы можете поломать программы, являющиеся частью ОС.
Решением проблемы размещения всех пакетов в глобальной среде будет использование отдельной виртуальной среды под каждый проект, над которым вы работаете.
Виртуальная среда это обычная папка, очень похожая на глобальную, куда вы можете устанавливать пакеты для вашего проекта.
Таким образом, каждый проект будет иметь свою отдельную виртуальную среду разработки (в директории .venv) вместе со своими пакетами.
Очень важной деталью является то, что путь к виртуальной среде будет помещен в самое начало переменной PATH. Система обнаружит данный путь к Python раньше, чем какой-либо другой. Таким образом, при запуске команды python, будет использован именно Python из виртуальной среды разработки, а не какой-нибудь другой (например, Python из глобальной среды)
Активация виртуальной среды разработки также меняет и несколько других вещей, но данная функция является основной.
Это означает, что будет использоваться pythonиз виртуальной среды разработки.
Вы используете which для Linux и macOS и Get-Command для Windows PowerShell.
Эта команда работает следующим образом: она проверяет переменную окружения PATH, проходя по очереди каждый указанный путь в поисках программы под названием python. И когда она её находит, то возвращает путь к данной программе.
Основной момент при вызове команды python состоит в том, какой именно "python" будет запущен.
Таким образом, вы можете убедиться, что используете правильную виртуальную среду разработки.
Подсказка
Легко активировать одну виртуальную среду, вызвать один Python и перейти к следующему проекту.
И следующий проект не будет работать потому, что вы используете неправильный Python из виртуальной среды другого проекта.
Так что, будет нелишним проверить, какой python вы используете. 🤓
Предположим, что вы работаете над проектом philosophers-stone, активируете виртуальную среду разработки, устанавливаете пакеты и работаете с данной средой.
И позже вам понадобилось поработать с другим проектомprisoner-of-azkaban.
Если вы не деактивировали виртуальное окружение проекта philosophers-stone, то при запуске python через консоль будет вызван Python из philosophers-stone
fast →cd ~/code/prisoner-of-azkaban python main.py 💬 Error importing sirius, it's not installed 😱Traceback (most recent call last): File "main.py", line 1, in import sirius
Но если вы деактивируете виртуальную среду разработки и активируете новую среду для prisoner-of-askaban, то вы тогда запустите Python из виртуального окружения prisoner-of-azkaban.
fast →cd ~/code/prisoner-of-azkaban 💬 Вам не требуется находится в старой директории для деактивации среды разработки, вы можете это сделать откуда угодно, даже из каталога другого проекта, в который вы перешли. 😎deactivate 💬 Активируйте виртуальную среду разработки в prisoner-of-azkaban/.venv 🚀source .venv/bin/activate 💬 Тепреь, когда вы запустите python, он найдет пакет sirius, установленный в виртуальной среде ✨python main.py Я торжественно клянусь в этом! 🐺
Это простое руководство поможет вам начать работу и научит тому, как всё работает изнутри.
Существует много альтернативных решений для работы с виртуальными средами разработки, с программными зависимостями, а также с проектами.
Когда вы будете готовы использовать единый инструмент для управления проектом, программными зависимостями, виртуальными средами разработки и т.д., то я рекомендую вам попробовать uv.
uv может очень многое. Он умеет:
Устанавливать Python, включая установку различных версий
Управлять средой виртуального окружения вашего проекта
Устанавливать пакеты
Управлять пакетами и их версиями внутри вашего проекта
Удостовериться, что вы используете точный набор пакетов и версий при установке, включая зависимости. Таким образом, вы можете быть уверенны, что проект, запускается в production, точно также, как и при разработке, этот механизм называется locking
Если вы прочитали и поняли всё это, то теперь вы знаете гораздо больше о виртуальных средах разработки, чем многие другие разработчики. 🤓
Скорее всего, знание этих деталей будет полезно вам в будущем. Когда вы будете отлаживать что-то, кажущееся сложным, вы будете знать, как это работает под капотом. 😎