активация virtualenv с помощью direnv не активирует virtualenv - PullRequest
0 голосов
/ 21 сентября 2018

Я использую direnv для создания моего virtualenv при переходе в каталог.

/project
   .envrc
   /env <--- my virtualenv

.envrc

source env/bin/activate

Когда я меняю каталог на /project, я получаювывод:

direnv: loading .envrc
direnv: export +VIRTUAL_ENV -PS2 ~PATH

Он добавляет каталог env к моей переменной среды PATH, поэтому при запуске which python и which pip оба указывают на python и pip, которые находятся в моем каталоге env

=> which python
/USER/project/env/bin/python
=> which pip
/USER/project/env/bin/pip

Однако, похоже, он не запускается source env/bin/activate, как я ожидаю.Я ожидаю, что он активирует мой virtualenv, добавив имя virtualenv (env) в мое приглашение CLI и предоставив доступ к команде deactivate, ничего из этого не происходит.Есть ли что-то, что я неправильно понимаю о том, как работают direnv и virtualenv?Я новичок в python, поэтому я не уверен, что существуют ли инструменты, позволяющие сделать что-то подобное.

1 Ответ

0 голосов
/ 22 сентября 2018

Я думаю, что важно понять, как директивна работает, чтобы сначала сформировать правильную ментальную модель;direnv не загружает .envrc непосредственно в текущую оболочку.Вместо этого он запускает новую оболочку bash, выполняет там .envrc, записывает изменения в среде и экспортирует diff bash в текущую оболочку.

Здесь происходит следующее:

virtualenv использует $PS1 для установки приглашения.Это локальная переменная и поэтому не реэкспортируется.direnv также фильтрует PS1, потому что вызывает сбой в старом macOS bash, когда он не установлен.

Функция deactivate() не экспортируется из вспомогательной оболочки bash, поскольку она не является переменной среды.

На практике активация работала, как вы заметили.Python находится на правильном пути и запускает pip или easy_install, чтобы установить вещи в virtualenv.деактивация не требуется, так как direnv автоматически выгружает среду при cd выходе из каталога.

Для восстановления настраиваемого приглашения в вики доступна дополнительная информация: https://github.com/direnv/direnv/wiki/Python#restoring-the-ps1

...