Рубрики
Без рубрики

Python: DIY Virtualenv

VirtualEnv в Python – очень известные инструменты. Почти все учебники будут рекомендовать … Tagged с Python, VirtualEnv.

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

Будучи необходимым, начиная с Python 3.4, он был связан с самим Python как Вен модуль.

Нет ничего волшебного в Virtualenv на самом деле. Это просто копия (или символа) для интерпретатора Python, который у вас уже есть в вашей системе, плюс пара других файлов.

Как мы узнали, когда мы, дети, лучший способ выучить и понять вещи – это сломать его или попытаться построить с нуля. Итак, давайте попробуем построить venv/virtualenv без использования встроенного модуля.

Как упоминалось ранее, VirtualEnv – это просто набор каталогов и файлов.

mkdir myenv
mkdir myenv/bin

Тогда нам нужно выяснить, где находится интерпретатор System Python.

which python3
/usr/local/bin/python3

Давайте скопим это в нашу “VirtualEnv”:-

cp /usr/local/bin/python3 myenv/bin/

Теперь давайте попробуем вызвать наш «новый» переводчик Python:-

myenv/bin/python3

Мы должны увидеть обычную подсказку, например:-

Python 3.6.0 (default, Jan 24 2017, 16:44:16)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Теперь наш «VirtualEnv» получил собственного переводчика, мы также должны убедиться, что у него есть свои собственные Сайт-Пэкиги Справочник, где будут жить все пакеты, которые мы собираемся установить. Это главная причина, по которой мы используем VirtualEnv, так что пакеты, которые мы устанавливаем, не испортились с системным Python или другим проектом VirtualEnv. Запустить myenv/bin/python3 и запустите этот код:-

>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/kamal/Library/Python/3.6/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']
>>> sys.prefix
'/Library/Frameworks/Python.framework/Versions/3.6'

Заметьте, что наш Менв Справочник не в выводе. Документы на sys.prefix говорит это:-

Если вступает в силу виртуальную среду, это значение будет изменено в site.py, чтобы указывать на виртуальную среду. Значение для установки Python все еще будет доступно через base_prefix.

И следуя по ссылке на Виртуальная среда это говорит об этом:-

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

Но что указывает на виртуальную среду? Я немного обманул здесь и создал новый VirtualEnv, используя Python -mvenv tmp_env И в недавно созданном VirtualEnv я заметил файл с именем pyenv.cfg которые содержат это:-

home = /usr/local/bin
include-system-site-packages = false
version = 3.6.0

Итак, давайте попробуем добавить этот файл в наш VirtualEnv как myenv/pyenv.cfg Анкет После добавления этого файла наш интерпретатор даст следующий вывод:-

>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload']
>>> sys.prefix
'/Users/kamal/myenv'

Обратите внимание на sys.prefix ценность. Теперь мы на что -то. Это правильно указывало на наш каталог VirtualENV. Однако наш виртуально не в sys.path Анкет Я что -то забыл! Мы до сих пор не создали lib каталог. Итак, давайте сделаем это сейчас:-

mkdir -p myenv/lib/python3.6/site-packages

И проверьте наше sys.path :-

>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/kamal/myenv/lib/python3.6/site-packages']

Теперь наше виртуально добавляется в sys.path ! Время установить несколько пакетов:-

myenv/bin/python3 -mpip install requests

Но мы получим следующую ошибку:-

/Users/kamal/myenv/bin/python3: No module named pip

Очевидно, наш Сайт-Пэкиги Справочник по -прежнему пуст, поэтому у нас еще нет PIP. К счастью, получить PIP не так уж и сложно.

wget https://bootstrap.pypa.io/get-pip.py
myenv/bin/python3 get-pip.py
Collecting pip
  Using cached https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl
Collecting setuptools
  Using cached https://files.pythonhosted.org/packages/37/06/754589caf971b0d2d48f151c2586f62902d93dc908e2fd9b9b9f6aa3c9dd/setuptools-40.6.3-py2.py3-none-any.whl
Collecting wheel
  Using cached https://files.pythonhosted.org/packages/ff/47/1dfa4795e24fd6f93d5d58602dd716c3f101cfd5a77cd9acbe519b44a0a9/wheel-0.32.3-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-18.1 setuptools-40.6.3 wheel-0.32.3

Теперь у нас есть Pip Установлен, давайте попробуем еще раз установить Запросы :-

myenv/bin/python3 -mpip install requests

На этот раз Запросы будет установлен без проблем. Давайте проверим его в правильном месте:-

myenv/bin/python3
>>> import requests
>>> requests

Это правильно, теперь у нас есть полностью функционирующий VirtualEnv!

Проницательный читатель может заметить, что все это далеко, мы ссылались на наш Python как myenv/bin/python3 . Что если мы хотим вызвать это просто как Python3 ? В Virtualenv есть концепция активировать что вы делаете после того, как создали новую Env. Это в основном добавляя недавно созданный каталог ENV в Путь переменная среды, которая представляет собой список пути поиска, используемый оболочкой ОС, чтобы найти, где существует конкретная программа. активировать Скрипт в основном выглядит так:-

OLD_PATH=$PATH
PATH=`pwd`/myenv/bin:$PATH

К деактивировать , мы заменяем Путь Вернуться к Old_path Анкет

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

PATH=`pwd`/myenv/bin:$PATH sh

И деактивировать, мы просто Выход из подборной. Лично я не рекомендую это «активировать». Я предпочитаю призывать прямого интерпретатора VirtualENV, используя его полный путь.

Оригинал: “https://dev.to/k4ml/python-diy-virtualenv-5e4j”