Я проверил активацию script, и мне кажется, что все, что она делает, это:
- set VIRTUAL_ENV env
- добавить $VIRTUAL_ENV/bin перед PATH
Как virtualenv
предоставляет эту магическую виртуальную среду? Что мне не хватает?
Я проверил активацию script, и мне кажется, что все, что она делает, это:
Как virtualenv
предоставляет эту магическую виртуальную среду? Что мне не хватает?
Я опишу основной процесс, который я узнал из презентации, с которой связан jcollado.
Когда начинается Python, он смотрит на путь двоичного кода и его префиксы. Итак, скажем, ваш virtualenv /home/blah/scratch
. Тогда двоичный код python (который является всего лишь копией двоичного кода вашей системы python) будет находиться в /home/blah/scratch/bin/python
. Python ищет lib/pythonX.X/os.py
в /home/blah/scratch/bin/
, затем /home/blah/scratch/
, и он останавливается там, потому что /home/blah/scratch/lib/pythonX.X/os.py
существует. Если бы это не так, Python продолжал искать /home/blah/lib/pythonX.X/os.py
и т.д. Затем он устанавливает sys.prefix
на основе этого. Он использует аналогичный процесс для установки sys.exec_prefix
, а затем на нем строится sys.path
.
Это очень хорошая презентация по этому вопросу. В основном, это объясняет шаги, чтобы написать собственный virtualenv
с теми же трюками, которые использовал Ian Bicking для его записи.
virtualenv myenv
. Это создает каталог с именем myenv и копирует бинарную систему python в myenv/bin. Он также добавляет другие файлы и директории в myenv, включая установку script в bin/activate и подкаталог lib для модулей и пакетов.. myenv/bin/activate
, который устанавливает переменную среды оболочки PATH
, чтобы начать с myenv/bin.python
из этой оболочки, он выполнит копию двоичного файла, хранящегося в myenv/bin. Несмотря на то, что двоичный файл идентичен файлу в /usr/bin/python, стандартный двоичный код python предназначен для поиска пакетов и модулей в каталогах, относящихся к пути двоичных файлов (эта функциональность не связана с virtualenv). Он выглядит в.. /lib/pythonX.Y, где X и Y - это основные и младшие номера версий двоичного кода python. Итак, теперь он ищет в myenv/lib/pythonX.Y.pip
, поэтому, когда пользователь устанавливает новые пакеты с помощью pip из virtualenv, они будут установлены в myenv/lib/pythonX.YЭта статья обслуживает python и django вместе с linux. http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/