Virtualenv: activ.sh терпит неудачу, если установлена ​​опция 'nounset'

Созданный на 7 июл. 2011  ·  24Комментарии  ·  Источник: pypa/virtualenv

Я получаю следующую ошибку, когда пытаюсь активировать virtualenv.

$ source test-env/bin/activate
-bash: _OLD_VIRTUAL_PATH: unbound variable

Это происходит потому, что я настроил Bash для использования параметра _nounset_, который выдает ошибку при доступе к неустановленным переменным (см. здесь )

Самый полезный комментарий

Обходной путь на данный момент —

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

Все 24 Комментарий

Я могу исправить это, изменив эту строку:
if [ -n "$OLD_VIRTUAL_PATH" ] ; then
к:
if [ -n "${_OLD_VIRTUAL_PATH=''}" ] ; then
Конструкция ${VAR=DEFAULT} возвращает VAR, если она установлена, и DEFAULT, если нет (см. эту страницу . Затем мы можем использовать пустую строку по умолчанию, вызывая ожидаемое поведение. Она немного менее читабельна, чем хотелось бы, но это делает свое дело.

На самом деле это хромое исправление, так как оно требует переписывания всех экзистенциальных тестов. Гораздо проще просто добавить set -o nounset в начало скрипта.

Я тоже попал в это.

Я тоже

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

Я пытаюсь найти способ сделать это здесь - http://stackoverflow.com/questions/13494841/how-can-you-ask-bash-for-the-current-options

Сделан запрос на включение - https://github.com/pypa/virtualenv/pull/357

Я бы сделал:

if [ -n "$OLD_VIRTUAL_PATH" ] ; then

к:

if [ -n "${_OLD_VIRTUAL_PATH-}" ] ; then
${var-DEFAULT}  If var not set, evaluate expression as $DEFAULT *

Ага, сам только что ударил.

Работает virtualenv==1.11.4 .

Обходной путь на данный момент —

set -o nounset

[...]

set +o nounset
. ~/.env/bin/activate
set -o nounset

[...]

Это может быть исправлено https://github.com/pypa/virtualenv/pull/723 , который использует if ! [ -z "${_OLD_VIRTUAL_PATH+x}" ] ; then .

Обратите внимание, что сам $_OLD_VIRTUAL_PATH должен быть удален в #722. Но #723 исправляет это и для других переменных.

:+1:

я тоже на это натыкаюсь....

Странно, что такая простая проблема не решается спустя четыре года.
Метод Бомартинеса на данный момент самый простой.

Это исправлено #645.

Фиксированный

@dstufft , не могли бы вы указать, в каком выпуске это было исправлено, чтобы мы могли убедиться, что у нас установлена ​​минимально необходимая версия? Из бага вообще непонятно, в какой релиз входит исправление.

@ssbarnea Это было исправлено 12 августа 2015 года, как указано в комментариях выше, поэтому любая версия, выпущенная после этой даты. Из https://virtualenv.pypa.io/en/latest/changes/ это означает 13.1.1 (и действительно, в примечании к этой версии конкретно упоминается это изменение). Вся эта информация легкодоступна, поэтому вы, вероятно, могли бы найти ее с помощью быстрого поиска (что я и сделал).

У меня плохие новости: эту ошибку следует открыть повторно, потому что теперь я получаю activate: line 13: _OLD_VIRTUAL_PYTHONHOME: unbound variable , и, исправляя это, я думаю, что очень важно ввести тест, который пытается активировать виртуальную среду, используя строгий bash .

Это также относится к line 22: ZSH_VERSION: unbound variable ... и интересно, как долго будет продолжаться список ... моя командная строка обходного пути начинает выглядеть извращенно:

PS1="${{PS1:-}}" _OLD_VIRTUAL_PATH="${{_OLD_VIRTUAL_PATH:-}}" _OLD_VIRTUAL_PYTHONHOME="${{_OLD_VIRTUAL_PYTHONHOME:-}}" source "$VENV/bin/activate"

Конечно, вы можете просто настроить среду самостоятельно или использовать полное имя исполняемого файла Python.

Извините за повторное обсуждение этого вопроса, я совершил ошибку, не проверив версии virtualenv, которые у нас были на сервере сборки, и сделал неприятное открытие, древнюю версию 1.10.1. Это будет считаться большим количеством ошибок. Я собираюсь обновить его завтра.

Извинения не нужны; На самом деле, я узнал кое-что из этого возрожденного
беседа.

Во вторник, 7 марта 2017 г., в 15:09, Сорин Сбарнеа, [email protected]
написал:

Извините, что возобновил дискуссию по этому поводу, я сделал ошибку, не
проверка версий virtualenv, которые у нас были на сервере сборки, и я
сделал некрасивое открытие, древняя версия 1.10.1. Это будет считаться за
много ошибок. Я собираюсь обновить его завтра.


Вы получаете это, потому что вы прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/pypa/virtualenv/issues/150#issuecomment-284859700 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/AAFWbGU02kdSoecXUESrDHlOUN9Rci5Oks5rjcdvgaJpZM4AQ_Js
.

Кажется, ошибка все еще существует даже в текущем выпуске, поэтому я поднял ее как https://github.com/pypa/virtualenv/issues/1029 .

теперь это исправлено https://github.com/pypa/virtualenv/pull/922

Была ли эта страница полезной?
0 / 5 - 0 рейтинги