Virtualenv ". Venv/bin/активировать" vs "источник venv/bin/activate"

скажем, что я создал виртуальный диск, называемый venv (virtualenv venv)

Из чтения учебников, я прочитал, есть два способа активировать виртуальный env:

  • . venv/bin/activate

  • source venv/bin/activate

Я думаю, что они оба выполняют одно и то же, но я не понимаю, что происходит.

Также для номера 1 не используется символ "." просто означает текущую папку? но он не работает, если я просто набираю "venv/bin/activate" без "."

любая помощь будет большой!

Ответ 1

. и source делают то же самое, с той лишь разницей, что в то время как source является более читаемым, он может быть недоступен во всех оболочках.

Команда запускает содержимое script в текущей оболочке, и это важно в случае activate, потому что одна из вещей, которую выполняет script, экспортирует и изменяет переменные среды в вашем текущем оболочки.

Если вы запустили его с помощью ./path/to/activate, script будет запущен в пределах подоболочки, и все установленные переменные окружения будут потеряны после завершения script, и подоболочка завершится.

Кроме того, для номера 1 не используется "." просто означает текущую папку?

. имеет другое значение в зависимости от контекста. Это означает только "текущую папку" при использовании в качестве (или части) пути.

От http://en.wikipedia.org/wiki/Dot_%28Unix%29:

Нельзя путать точку с файлом dot, который является скрытым или скрытым каталогом с префиксом с запятой.


Как в сторону, я бы предложил вам взглянуть на virtualenvwrapper, который предоставляет дополнительные команды оболочки, которые делают virtualenv много проще в использовании.

Используя virtualenvwrapper, переход в среду выполняется просто путем вызова:

workon YOUR_ENV

Ответ 2

Команда . по существу является псевдонимом для source. Они оба выполняют заданный script в текущей оболочке без наложения новой оболочки.

Вот несколько хороших примеров.