Я проверил активацию 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/