Я знаком с тем, как работает python virtualenv, и когда мы активизируем, он в основном изменяет переменную и PATH
. Прежде всего, он добавляет каталог bin
virtualenv в систему PATH
и устанавливает VIRTUAL_ENV
, чтобы указать на каталог виртуального env root.Как пип знает о virtualenv и где устанавливать пакеты
В качестве эксперимента я сделал это с помощью virtualenv (версия 1.11.6):
# Created two fresh virtual environments
virtualenv /tmp/env1
virtualenv /tmp/env2
echo $PATH
> SOME_PATH_VALUE
# Play with env1
source /tmp/env1/bin/activate
echo $PATH
> /tmp/env1/bin:SOME_PATH_VALUE
pip list
> pip, setuptools, wsgiref
pip install wget
> pip, setuptools, `wget`, wsgiref
# Obviously env2 has pip, setuptools and wsgiref only as of now
export PATH=/tmp/env2/bin:$PATH
pip list
> pip, setuptools, wsgiref
С моих экспериментов было исключительно в зависимости от PATH
переменной для определения пути установки, но я не уверен, если то будет полная картина. Таким образом, ключевыми вопросами являются:
- Как пип знает, где установить запрошенный пакет?
- Если мой virtualenv настроен не искать пакеты сайтов (гарантируется, что файл
no-global-site-packages.txt
существует в правильном месте) и переменнаяPATH
правильно установлена, но установка pip все еще выглядит в системных сайтах-пакетах, а затем как отлаживать это?
Отлично! Таким образом, каждая установка virtualenv имеет другой двоичный файл bin/python, который имеет информацию, жестко закодированную при создании среды. –