Skip to content

Latest commit

 

History

History
546 lines (373 loc) · 61.2 KB

README_venv.md

File metadata and controls

546 lines (373 loc) · 61.2 KB

Разработчики venv

Модуль venv в Python разрабатывается и поддерживается командой разработчиков Python, организованной Python Software Foundation (PSF). PSF - это некоммерческая организация, которая обеспечивает развитие и поддержку языка программирования Python и связанных с ним технологий.

Разработка модуля venv идет вместе с разработкой самого языка Python и является частью стандартной библиотеки Python. Он предоставляет удобные средства для создания виртуальных окружений Python, которые позволяют изолировать зависимости и проекты, делая управление пакетами и версиями Python более гибкими и удобными.

Организация Python Software Foundation поддерживает множество разработчиков, включая тех, кто работает над стандартной библиотекой Python, и разрабатывает модули, такие как venv, чтобы обеспечить качество и актуальность инструментов, предоставляемых Python.

Таблица команд для conda и venv

Описание команды Пример для Conda Пример для Venv
Список всех ВО conda env list conda info --envs python -m venv --list python -m venv -l
Создание нового окружения conda create --name myenv python -m venv myenv
python3 -m venv /path/to/myenv_name
Активация окружения conda activate myenv source myenv/bin/activate (Unix)
myenv\Scripts\activate (Windows)
Деактивация окружения conda deactivate deactivate
Установка пакета в окружение conda install -n myenv numpy (myenv) pip install numpy
Список установленных пакетов conda list -n myenv (myenv) pip list
Экспорт списка зависимостей conda list -n myenv --export (myenv) pip freeze
Создание копии окружения conda create --name newenv --clone myenv Не применимо для venv; клонирование делается вручную
Удаление окружения conda remove --name myenv --all Удаление папки myenv
rm -rf /work/ChiSpark/chi
Проверка установки менеджера окружений conda --version или conda info python -m venv --help (venv встроен в Python, так что отдельная проверка установки не требуется)
Просмотр версии менеджера окружений conda --version Для venv применимо Python версии: python --version
Проверка активации окружения echo $CONDA_DEFAULT_ENV (Unix)
echo %CONDA_DEFAULT_ENV% (Windows)
echo $VIRTUAL_ENV (Unix)
echo %VIRTUAL_ENV% (Windows)

Проверка наличия venv

Проверить, установлен ли venv в командной строке (cmd) Windows, выполнив следующую команду:

py -m venv --help

-m - использовать модуль

Если venv установлен, вы увидите справочную информацию о его использовании. Если вы видите сообщение об ошибке или не получаете информацию о venv, это может означать, что venv не установлен или его путь не включен в переменную среды PATH.

Если venv не установлен, вы можете установить его, выполнив следующую команду (при условии, что у вас уже установлен Python и pip):

py -m ensurepip --upgrade
py -m venv your_venv_name
C:\Users\user>py -m venv --help
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
            [--upgrade] [--without-pip] [--prompt PROMPT]
            ENV_DIR [ENV_DIR ...]

Creates virtual Python environments in one or more target directories.

positional arguments:
  ENV_DIR               A directory to create the environment in.

optional arguments:
  -h, --help            show this help message and exit
  --system-site-packages
                        Give the virtual environment access to the system
                        site-packages dir.
  --symlinks            Try to use symlinks rather than copies, when symlinks
                        are not the default for the platform.
  --copies              Try to use copies rather than symlinks, even when
                        symlinks are the default for the platform.
  --clear               Delete the contents of the environment directory if it
                        already exists, before environment creation.
  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.
  --without-pip         Skips installing or upgrading pip in the virtual
                        environment (pip is bootstrapped by default)
  --prompt PROMPT       Provides an alternative prompt prefix for this
                        environment.

Once an environment has been created, you may wish to activate it, e.g. by
sourcing an activate script in its bin directory.

Позиционные аргументы:

ENV_DIR: Каталог, в котором нужно создать виртуальное окружение.

Дополнительные аргументы:

-h, --help: Отображает эту справку и завершает выполнение программы. --system-site-packages: Предоставляет виртуальному окружению доступ к системным пакетам site-packages. --symlinks: Попытаться использовать символические ссылки вместо копирования, если символические ссылки не являются настройкой по умолчанию для данной платформы. --copies: Попытаться использовать копирование вместо символических ссылок, даже если символические ссылки являются настройкой по умолчанию для данной платформы. --clear: Удаляет содержимое каталога окружения, если он уже существует, перед созданием нового окружения. --upgrade: Обновить каталог окружения для использования этой версии Python, предполагая, что Python был обновлен на месте. --without-pip: Пропускает установку или обновление pip в виртуальном окружении (по умолчанию pip устанавливается автоматически). --prompt PROMPT: Предоставляет альтернативный префикс приглашения для этого окружения.

Команда venv используется для создания виртуальных окружений Python, и ENV_DIR представляет собой путь к каталогу, в котором будет создано виртуальное окружение. Вот несколько примеров использования ENV_DIR:

Создание виртуального окружения в текущем каталоге с именем "myenv":

venv myenv

Создание виртуального окружения в другом каталоге, например, "C:\Projects\myproject", с именем "myenv":

venv C:\Projects\myproject\myenv

Создание виртуальных окружений в нескольких каталогах сразу:

venv env1 env2 env3
В этом случае будут созданы виртуальные окружения с именами "env1", "env2" и "env3" в текущем рабочем каталоге.

Создание виртуального окружения в каталоге с пробелами в имени (путь обязан быть заключен в кавычки):

venv "C:\Projects\My Project\myenv"

Создание виртуального окружения с использованием относительного пути:

venv ../myenv

Если не срабатывает

venv myenv

Проблема заключается в том, что команда venv не распознается в вашей командной строке. Это может произойти, если venv не включен в переменную среды PATH, либо если в вашей системе используется другая версия Python, в которой venv может иметь другое имя.

В этом случае, вы можете попробовать использовать python -m venv для создания виртуального окружения. Вот как это сделать: Откройте командную строку (cmd) в Windows. Перейдите в каталог, где вы хотите создать виртуальное окружение. Затем выполните следующую команду, указав полный путь к интерпретатору Python:

python -m venv myenv

Где python - это полный путь к исполняемому файлу Python. В вашем случае, возможно, это python3, python3.9, или что-то подобное в зависимости от вашей версии Python. Если команда успешно выполнится, она создаст виртуальное окружение с именем "arch" в текущем каталоге.

Для активации созданного виртуального окружения (venv) в командной строке Windows, вы должны выполнить скрипт активации, который находится в каталоге Scripts вашего виртуального окружения. Вот как это сделать:

Откройте командную строку (cmd) в Windows.

Перейдите в каталог, где находится ваше виртуальное окружение. Например, если вы создали виртуальное окружение с именем "myenv" в текущем каталоге, перейдите в него следующей командой:

cd path\to\myenv
Для командной строки (cmd):
Scripts\activate
Для PowerShell:
Scripts\Activate.ps1

Аргумент --system-site-packages используется при создании виртуального окружения (venv) для предоставления виртуальному окружению доступа к системным библиотекам Python, которые находятся в директории site-packages системного Python. Это может быть полезно, если вы хотите использовать некоторые библиотеки, установленные глобально на вашей системе, внутри вашего виртуального окружения. Вот несколько примеров команд с использованием аргумента --system-site-packages:

Создание виртуального окружения с доступом к системным библиотекам: python -m venv --system-site-packages myenv

Создание нескольких виртуальных окружений с доступом к системным библиотекам: python -m venv --system-site-packages env1 env2 env3

Создание виртуального окружения без доступа к системным библиотекам (по умолчанию): python -m venv myenv

При использовании --system-site-packages, виртуальное окружение будет иметь доступ к библиотекам, установленным в системном Python. Это может быть полезно, когда вам нужно использовать библиотеки, которые уже установлены на вашем компьютере, и вы не хотите их дублировать в виртуальном окружении.

Аргумент --symlinks используется при создании виртуального окружения (venv) для указания, что следует попытаться использовать символические ссылки вместо копирования библиотек Python, когда символические ссылки не являются настройкой по умолчанию для вашей операционной системы. Использование символических ссылок может сэкономить дисковое пространство и уменьшить время создания виртуального окружения. Вот несколько примеров команд с использованием аргумента --symlinks:

Создание виртуального окружения с использованием символических ссылок (если они доступны на вашей ОС): python -m venv --symlinks myenv

Создание нескольких виртуальных окружений с использованием символических ссылок: python -m venv --symlinks env1 env2 env3

Создание виртуального окружения с копированием библиотек (если символические ссылки - настройка по умолчанию): python -m venv myenv

При использовании --symlinks, виртуальное окружение будет пытаться использовать символические ссылки для библиотек Python, если это поддерживается вашей операционной системой. Если символические ссылки не поддерживаются, будет использоваться копирование. Это может быть полезно для экономии дискового пространства и ускорения создания виртуальных окружений, если символические ссылки поддерживаются на вашей системе.

Аргумент --copies используется при создании виртуального окружения (venv) для указания, что следует попытаться использовать копирование библиотек Python вместо символических ссылок, даже если символические ссылки являются настройкой по умолчанию для вашей операционной системы. Использование копий может быть полезным в ситуациях, когда символические ссылки не подходят или не поддерживаются на вашей системе. Вот несколько примеров команд с использованием аргумента --copies:

Создание виртуального окружения с использованием копий библиотек: python -m venv --copies myenv

Создание нескольких виртуальных окружений с использованием копий: python -m venv --copies env1 env2 env3

Создание виртуального окружения с использованием символических ссылок (если они доступны на вашей ОС): python -m venv myenv

При использовании --copies, виртуальное окружение будет пытаться использовать копирование библиотек Python, даже если символические ссылки являются настройкой по умолчанию для вашей операционной системы. Это может быть полезно, если символические ссылки не поддерживаются или вызывают проблемы на вашей системе.

Аргумент --upgrade используется при создании виртуального окружения (venv) для обновления окружения до использования текущей версии Python, предполагая, что Python был обновлен на месте. Вот пример команды с использованием аргумента --upgrade:

Обновление виртуального окружения до текущей версии Python: python -m venv --upgrade myenv

Эта команда используется, когда вы хотите убедиться, что ваше виртуальное окружение использует текущую версию Python, которая может быть установлена после создания окружения. В результате выполнения этой команды, виртуальное окружение будет обновлено, чтобы использовать текущую версию Python, доступную на вашей системе.

В контексте аргумента --upgrade при создании виртуального окружения (venv), "текущей версией" обычно понимается версия Python, установленная на хост-машине, на которой вы выполняете команду создания виртуального окружения.

Это означает, что --upgrade обновляет виртуальное окружение, чтобы использовать версию Python, которая установлена на вашей системе на момент выполнения команды. Например, если на вашей системе установлена Python 3.9, и вы создали виртуальное окружение с Python 3.7, выполнение --upgrade обновит виртуальное окружение до Python 3.9.

Аргумент --upgrade не связан с версиями Python, доступными в интернете или глобально. Это всегда обновление виртуального окружения на основе версии, установленной на вашем компьютере.

Установка ВО внутри ВО?

В большинстве случаев можно создать виртуальное окружение (ВО) внутри другого виртуального окружения. Этот процесс называется "вложенными виртуальными окружениями". Это может быть полезно в сценариях разработки, когда вам нужно создать изолированное окружение для проекта, который сам использует виртуальное окружение для управления своими зависимостями.

Вот как создать вложенное виртуальное окружение:

Активируйте внешнее виртуальное окружение, в котором вы хотите создать вложенное ВО.

После активации внешнего ВО, выполните команду для создания вложенного ВО, как обычно. Например: python -m venv my_nested_env

Это создаст вложенное ВО с именем my_nested_env внутри текущего внешнего ВО. Выход из внешнего ВО не влияет на вложенное ВО. Вложенное ВО остается активным внутри внешнего. Вы можете активировать вложенное ВО так же, как и внешнее ВО, и управлять зависимостями в нем.

Для выхода из вложенного ВО и возврата во внешнее ВО, используйте команду deactivate. После этого вы снова будете внутри внешнего ВО. Важно отметить, что вложенные виртуальные окружения создают дополнительный уровень изоляции для управления зависимостями, но это также может создать некоторую сложность в управлении окружениями. Убедитесь, что это действительно необходимо в вашем конкретном случае.

Примеры использования вложенных ВО

Вложенные виртуальные окружения (ВО) решают ряд типичных задач, связанных с разработкой и управлением зависимостями в проектах Python:
Изоляция зависимостей проекта: Когда у вас есть проект, который требует конкретных версий библиотек или зависимостей, вложенные ВО позволяют вам создать изолированное окружение, где будут установлены только необходимые библиотеки для этого проекта. Это предотвращает конфликты между зависимостями разных проектов.

Тестирование и разработка с разными версиями Python: Вы можете создавать вложенные ВО для тестирования своего проекта с разными версиями Python. Например, вы можете иметь внешнее ВО с Python 3.7 и вложенное ВО с Python 3.8 для проверки совместимости вашего кода с разными версиями интерпретатора.

Создание виртуального окружения внутри виртуального окружения: Иногда вам может понадобиться внутри проекта создать ещё одно изолированное окружение. Это может быть полезно, когда вы разрабатываете веб-приложение, использующее фреймворк Django, и вы хотите создать отдельное ВО для управления зависимостями вашего фронтенда, например, React.

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

Обновление окружения к последней версии Python: Вложенные ВО могут быть использованы для обновления окружения до последней версии Python. Вы можете создать вложенное ВО с новой версией Python и проверить, как ваши проекты работают с ней, прежде чем обновить внешние окружения.

Изоляция системных библиотек и Python: Если вы работаете в среде, где системные библиотеки и Python могут быть изменены, вложенные ВО могут обеспечить стабильное и изолированное окружение для ваших проектов.

Работа с разными версиями фреймворков и платформ: Вложенные ВО могут быть полезными для разработки и тестирования на разных версиях фреймворков и платформ, таких как Django, Flask, или разные версии операционных систем.

В целом, вложенные ВО предоставляют мощное средство управления зависимостями и окружениями Python, что делает их полезными инструментами для разработчиков при работе над различными проектами и сценариями.

Количество уровней вложенности

Количество уровней вложенности виртуальных окружений Python (ВО) теоретически не ограничено. Вы можете создавать вложенные ВО внутри других вложенных ВО, и так далее. Однако важно понимать, что каждое вложенное ВО создает дополнительный уровень изоляции и увеличивает сложность управления окружениями.

При использовании большого числа вложенных ВО стоит учитывать следующие аспекты:

Сложность управления: Чем больше уровней вложенности, тем сложнее становится управление окружениями. Вам может потребоваться активировать и деактивировать каждое окружение вручную.

Использование ресурсов: Каждое ВО потребляет ресурсы, такие как дисковое пространство для установленных пакетов и оперативную память при выполнении кода. Слишком много вложенных ВО может привести к избыточному использованию ресурсов.

Уровни изоляции: Большее количество уровней изоляции может быть полезным для предотвращения конфликтов зависимостей, но оно также может сделать разработку и тестирование более сложными и затратными.

Зависимости и настройки: При увеличении уровней вложенности важно следить за зависимостями и настройками в каждом ВО. Это может потребовать дополнительных усилий для поддержания согласованных и стабильных окружений.

Исходя из этих соображений, рекомендуется использовать вложенные ВО с умеренностью и основывать решение на конкретных потребностях проекта. В большинстве случаев одно вложенное ВО может быть достаточным для управления зависимостями и изоляцией проекта от других проектов и системных библиотек.

Аргумент --without-pip

Аргумент --without-pip используется при создании виртуального окружения (venv) для пропуска установки или обновления инструмента управления пакетами Python (pip) внутри виртуального окружения. Это может быть полезным, если вы хотите создать минимальное окружение без pip или если вы хотите использовать другой инструмент для управления пакетами. Вот несколько примеров команд с использованием аргумента --without-pip:

Создание виртуального окружения без pip: python -m venv --without-pip myenv

Создание нескольких виртуальных окружений без pip: python -m venv --without-pip env1 env2 env3

Создание виртуального окружения с установкой pip (по умолчанию, без использования аргумента --without-pip): python -m venv myenv

Когда вы создаете виртуальное окружение с помощью --without-pip, pip не будет установлен внутри этого окружения, и вы не сможете использовать pip для установки пакетов внутри этого окружения, пока pip не будет установлен вручную.

Чтобы установить pip внутри виртуального окружения без pip, вы можете использовать скрипт get-pip.py (который можно скачать с сайта pip). Например:

# Активируйте виртуальное окружение
source myenv/bin/activate

# Скачайте скрипт установки pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

# Запустите скрипт установки pip внутри виртуального окружения
python get-pip.py

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

Аргумент --prompt. Пользовательские приглашения.

Аргумент --prompt PROMPT используется при создании виртуального окружения (venv) для установки пользовательской строки приглашения (prompt), которая будет отображаться в командной строке при активации данного виртуального окружения. Это может быть полезным для идентификации и различения разных виртуальных окружений. Вот примеры команд с использованием аргумента --prompt:

Создание виртуального окружения с пользовательским приглашением: python -m venv --prompt myenvprompt myenv

В этом примере, myenvprompt - это пользовательское приглашение (prompt), которое будет отображаться при активации виртуального окружения myenv.

Создание виртуального окружения с другим пользовательским приглашением: python -m venv --prompt devenv dev

В этом случае, devenv - это пользовательское приглашение (prompt) для виртуального окружения dev.

Когда вы активируете виртуальное окружение с пользовательским приглашением, в командной строке вы увидите это приглашение, чтобы помочь вам определить текущее активное окружение. Например:

(devenv) C:\path\to\myenv>

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

Настройка пользовательской строки приглашения (--prompt) в виртуальном окружении (ВО) полезна в нескольких типичных случаях:

Идентификация окружения: Если у вас есть несколько виртуальных окружений и вы хотите быстро идентифицировать, в каком окружении вы работаете в данный момент, настройка пользовательской строки приглашения может помочь. Вы можете включить в строку приглашения имя окружения или другую информацию, которая помогает вам понять, где вы находитесь.

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

Отличие от глобального окружения: Строка приглашения может также помочь вам ясно видеть, что вы работаете в виртуальном окружении, а не в глобальном окружении Python, установленном на вашей системе.

Определение конфигурации окружения: Вы можете включить в строку приглашения информацию о конфигурации вашего окружения, такую как версия Python, версия важных библиотек и т.д. Это может быть полезно для быстрой проверки текущей конфигурации.

Удобство: Для многих разработчиков настройка строки приглашения просто делает работу более удобной. Это позволяет быстро распознавать текущее окружение и избегать путаницы.

В итоге, настройка строки приглашения - это инструмент для улучшения удобства работы с виртуальными окружениями и помощь в избегании ошибок при работе с разными окружениями и проектами.

Активация ВО только в рамках текущего процесса (терминала).

Когда вы активируете виртуальное окружение (ВО) в командной строке (или терминале), это активирует ВО только в текущем окне командной строки или терминала. Активация ВО не распространяется на другие окна командной строки или терминалы, которые вы можете открыть параллельно.

Каждое окно командной строки (или терминал) работает в своем собственном процессе и имеет свое собственное окружение. Активация ВО в одном окне не повлияет на другие окна.

Это полезно, так как позволяет вам иметь разные ВО для разных проектов или задач, и вы можете активировать их по мере необходимости в соответствующих окнах командной строки или терминала.

Каждое окно командной строки (или терминал) работает в своем собственном процессе, что означает, что оно выполняется в отдельной программе в операционной системе. Это важное понятие в контексте того, как виртуальные окружения (ВО) и команды, связанные с ВО, взаимодействуют с окружением операционной системы.

Взаимодействие виртуального окружения с окружением операционной системы

Вот некоторые ключевые моменты, связанные с этим понятием:

Разные окна - разные процессы: Каждое окно командной строки, которое вы открываете, запускается в своем собственном процессе операционной системы. Это означает, что изменения и настройки, сделанные в одном окне, не затрагивают другие окна.

Изоляция ВО: Виртуальные окружения (ВО) предназначены для изоляции зависимостей и пакетов между проектами. Когда вы активируете ВО в одном окне командной строки, это ВО становится активным только в этом окне. Другие окна не будут знать о существовании или активации этого ВО.

Системные и глобальные переменные: Каждое окно командной строки имеет свои собственные переменные окружения, включая переменные Python, PATH, и другие. Изменения переменных в одном окне не отразятся на переменных в других окнах.

Изоляция процессов: Каждый процесс, запущенный в одном окне, изолирован от процессов в других окнах. Это означает, что если вы выполняете программу или сервер в одном окне, он не будет виден из других окон.

Важно понимать это, потому что при работе с ВО вам может потребоваться активировать ВО в каждом окне командной строки (или терминала), где вы планируете выполнять свой код или управлять зависимостями. Каждое окно имеет свою собственную среду выполнения, и активация ВО в одном окне не затронет другие окна.

Системные и глобальные переменные

Системные и глобальные переменные, такие как PATH и другие, могут оказать влияние на способ работы вашей системы и программ, включая Python. Вот как их можно просмотреть и управлять ими:

PATH (переменная PATH):

Windows: Переменная PATH определяет список директорий, в которых операционная система ищет исполняемые файлы, включая интерпретатор Python. Вы можете просмотреть текущее значение PATH в командной строке Windows с помощью команды: echo %PATH%
Powershell: echo $Env:PATH

macOS и Linux: Вы можете просмотреть текущее значение PATH в терминале macOS или Linux с помощью команды: echo $PATH

Переменные окружения Python.

Python также имеет свои собственные переменные окружения, которые могут влиять на его поведение. Вы можете просмотреть некоторые из них, используя команду python -m site, которая покажет информацию о местоположении конфигурации Python и другие параметры, такие как sys.prefix и sys.executable.

Установленные пакеты Python:
Для просмотра списка установленных пакетов и их версий в виртуальном окружении или глобально, вы можете использовать команду pip list. Или для вывода в формате, удобном для сохранения в файл:
pip freeze > requirements.txt
Где requirements.txt - это файл, содержащий список установленных пакетов и их версий.

Настройка переменных окружения

Чтобы изменить переменные окружения или управлять зависимостями, вы можете внести изменения в соответствующие файлы конфигурации или использовать специфические команды, такие как export (для Linux и macOS) или set (для Windows), чтобы временно изменить переменные в текущей сессии командной строки.

существуют различные терминалы и интерфейсы командной строки (CLI), которые предоставляют дополнительные возможности для управления процессами и переменными окружения на Windows и Linux. Вот некоторые из них:

Для Linux:

  • tmux: Это мультиплексор терминала, который позволяет вам создавать и управлять несколькими терминальными сессиями и окнами одновременно. Вы можете использовать его для создания разных окон для отслеживания процессов и изменения переменных окружения.

  • screen: Аналогично tmux, screen - это терминальный мультиплексор, который позволяет создавать отдельные терминальные сессии.

  • htop: Это интерактивная утилита для мониторинга процессов в реальном времени. Htop предоставляет более продвинутые возможности отслеживания процессов по сравнению с командой top.

Для Windows:

  • PowerShell: PowerShell - это мощный командный интерфейс для управления Windows и его компонентами. Он предоставляет богатые возможности для работы с процессами, файлами и переменными окружения.

  • Cmder: Это популярный терминал для Windows, который предоставляет улучшенные возможности командной строки и позволяет удобно управлять процессами и переменными окружения.

  • Windows Subsystem for Linux (WSL): Если у вас установлен WSL, вы можете использовать терминал внутри Linux-среды для выполнения команд Linux, включая управление процессами и переменными окружения.

  • Process Explorer: Это бесплатная утилита от Microsoft, которая предоставляет подробную информацию о запущенных процессах в Windows. Вы можете использовать ее для отслеживания и завершения процессов.

Чтобы управлять системными и глобальными переменными, вы можете использовать команды для установки, изменения и удаления переменных в вашей системе. В Linux это часто делается с помощью команды export, а в Windows - с помощью команд setx или через панель управления. Подробности могут зависеть от вашей операционной системы и версии.

Именование ВО. Почему venv?

Задание явного имени ВО полезно, когда у вас есть несколько проектов и вы хотите легко идентифицировать, к какому проекту принадлежит каждое ВО. Это помогает избежать путаницы и конфликтов между разными окружениями.

Общепринятым и часто используемым именем для виртуального окружения (ВО) является "venv". Это имя просто указывает на то, что вы создаете стандартное виртуальное окружение для Python. Многие разработчики и инструкции по созданию ВО используют именно это имя.

python -m venv venv

Использование имени .venv для виртуального окружения (ВО) является распространенной практикой, и оно имеет свои преимущества. Вот почему разработчики иногда предпочитают использовать это имя:

Скрытое имя: В Linux и macOS файлы и каталоги, начинающиеся с точки (например, .venv), считаются скрытыми и обычно не отображаются в обозревателях файлов по умолчанию. Это может быть полезно, чтобы не загромождать список файлов в директории проекта ВО.

Исключение из системы контроля версий: Если вы используете систему контроля версий, такую как Git, то имя .venv по умолчанию будет проигнорировано (игнорироваться в .gitignore), что предотвращает добавление виртуального окружения в репозиторий, что часто желательно.

Ясность и единообразие: Использование .venv в качестве имени ВО может сделать ваши проекты более ясными и удобными для других разработчиков. Это распространенное соглашение и может улучшить читаемость вашего кода.

Список ВО: Conda env list --json

Предполагается, что вывод команды conda env list --json имеет структуру JSON, включающую ключ "envs", к которому можно обращаться для получения списка окружений.
Пример вывода:

{
  "envs": [
    "C:\\Users\\user\\anaconda3",
    "C:\\Users\\user\\anaconda3\\envs\\fastapi",
    "C:\\Users\\user\\anaconda3\\envs\\spark",  
    "C:\\Users\\user\\anaconda3\\envs\\tf",     
    "C:\\Users\\user\\anaconda3\\envs\\vbt"     
  ]
}

Поэтому можно обрабатывать списки окружений:

# Выполняем команду "conda env list --json" и декодируем вывод
envs_info = subprocess.check_output(\
    ["conda", "env", "list", "--json"]).decode("utf-8")
# Преобразуем JSON-данные в словарь
envs_data = json.loads(envs_info)

for env in envs_data["envs"]:
    # Извлекаем имя окружения из пути
    env_name = os.path.basename(env)

CONDA_ENVS_PATH - папка с ВО по умолчанию для Conda

Для Conda существует специальная переменная окружения, которая указывает на базовую директорию, где хранятся все виртуальные окружения. Эта переменная называется CONDA_ENVS_PATH:

import os

conda_envs_path = os.environ.get("CONDA_ENVS_PATH")

if conda_envs_path:
    print(f"Conda environments are located in: {conda_envs_path}")
else:
    print("CONDA_ENVS_PATH is not set.")

Примеры команд активации для venv

Чтобы активировать виртуальное окружение, находящееся в папке C:\Users\user\Documents\Pro\Archip\arch\myenv_prompt\Scripts, вам нужно выполнить следующие действия в зависимости от вашей операционной системы:

Для Windows:

C:\Users\user\Documents\Pro\Archip\arch\.test_venv\Scripts\activate

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

(.test_venv) PS C:\Users\user\documents\pro\Archip\arch>

Unix:

(.test_venv) user@hostname:~/documents/pro/Archip/arch$

Префикс (.test_venv) говорит о том, что ВО активировано.

Для Linux и macOS:

source /Users/user/Documents/Pro/Archip/arch/.test_venv/Scripts/activate

Также можно перейти в папку проекта и ввести команду . .test_venv\Scripts\activate в Виндоус или ource .test_venv/bin/activate в Юникс

venv и virtualenv

Команда для активации виртуального окружения в Windows PowerShell одинакова для venv и virtualenv.

Однако, в контексте Python, venv и virtualenv - это разные инструменты, хотя и выполняют схожую функцию создания виртуальных окружений.

venv - это встроенный модуль Python, который позволяет создавать виртуальные окружения. Он поставляется с Python начиная с версии 3.3.

virtualenv - это сторонний пакет Python, который также используется для создания виртуальных окружений. Он доступен через установку с помощью pip и может быть использован с любой версией Python.

Оба инструмента позволяют создавать изолированные окружения для разработки, их структура и функциональность очень похожи. Тем не менее, они могут иметь некоторые различия в функциональности и поддержке.

В данном контексте, когда мы говорим о создании и активации виртуального окружения, подход с использованием venv и virtualenv в Windows PowerShell будет одинаковым.

Файл конфигурации .condarc

Конда, как менеджер пакетов и виртуальных окружений Python, обычно создает виртуальные окружения в предопределенных местах по умолчанию. Эти места обычно указаны в файле конфигурации .condarc, который может быть изменен по вашему усмотрению.

По умолчанию, конда создает виртуальные окружения в папках, которые обычно доступны для записи пользователям. В случае контейнера Docker, папки, такие как /home/jovyan/.conda/envs или /opt/conda/envs, могут быть доступны для записи пользователю, запускающему контейнер, в зависимости от настроек контейнера.

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

envs_dirs:
  - /путь/к/вашему/каталогу/с/окружениями

Файл .condarc — это конфигурационный файл для Conda, который обычно располагается в домашнем каталоге пользователя. Однако, в контейнере, особенно в Docker-контейнере, этот файл может отсутствовать по умолчанию.

Если у вас нет файла .condarc в контейнере, вы можете создать его вручную. Вам просто нужно создать файл .condarc в домашнем каталоге пользователя (или там, где у вас установлен Conda).

Вы можете создать файл .condarc с помощью любого текстового редактора внутри контейнера.

Найти:

find / -name .condarc

Запуск базового окружения base в Bash

В зависимости от пути установки выполнить команду:

"$(/opt/conda/bin/conda shell.bash hook)"

/opt/conda/bin/conda shell.bash hook: Это скрипт, который генерирует команды для текущей оболочки (в вашем случае, для Bash), чтобы управлять окружениями и переменными, связанными с Conda. Этот скрипт генерирует необходимые команды для активации и деактивации окружений Conda, а также для корректного обновления переменных среды.

$(...): Это конструкция командной оболочки Bash, которая выполняет команду внутри скобок и подставляет результат этой команды на место выражения. Таким образом, $(/opt/conda/bin/conda shell.bash hook) выполняет скрипт conda shell.bash hook и возвращает результат этого выполнения.

eval: Эта команда Bash используется для выполнения переданных ей аргументов как командной строки. Она интерпретирует и выполняет строку как код Bash.

Таким образом, выполнение eval "$(/opt/conda/bin/conda shell.bash hook)" приводит к тому, что содержимое скрипта conda shell.bash hook выполняется в текущей оболочке. Это позволяет настроить окружение так, чтобы команды conda activate, conda deactivate и другие команды Conda работали корректно.

Без выполнения этой команды, ваша оболочка Bash не знала о том, как правильно управлять окружениями Conda, и поэтому не могла выполнить команду conda activate base.

Запуск базового окружения base в Powershell

Чтобы настроить окружение для работы с Conda, выполните:

& "C:\Users\user\anaconda3\Scripts\conda.exe" "shell.powershell" "hook" | Out-String | Invoke-Expression

Эта команда выполняет скрипт conda.exe с параметрами "shell.powershell" "hook", преобразует вывод в строку и выполняет его как команду PowerShell.

& "C:\Users\user\anaconda3\Scripts\conda.exe" "shell.powershell" "hook": Эта команда выполняет скрипт shell.powershell hook, предоставляемый Conda, чтобы настроить среду для работы с Conda в PowerShell.

Out-String: Эта команда преобразует вывод команды в строку. Это может потребоваться для корректной обработки вывода.

Where-Object {$_}: Это фильтр, который убирает пустые строки из вывода.

Invoke-Expression: Эта команда выполняет строку как команду PowerShell.

Активация конда окружения по пути

Если вы хотите выполнить команду conda list для определенного окружения Conda без его активации, вы можете использовать флаг -p или --prefix для указания пути к окружению.

В вашем случае, если вы хотите выполнить команду conda list для окружения, расположенного по пути /opt/conda - базовое окружение, вы можете использовать следующий синтаксис:

conda list -p /opt/conda

для виндоус пути C:\Users\user\anaconda3\envs\fastapi:

conda list -p C:\Users\user\anaconda3\envs\fastapi

Conda может управлять пакетами из различных каналов, в том числе из официального репозитория Anaconda, conda-forge, PyPI (Python Package Index) и других. Когда вы устанавливаете пакеты с помощью Conda, по умолчанию используется канал по умолчанию, который обычно является репозиторием Anaconda. Однако вы также можете указать другие каналы при установке пакетов.