Virtualenvwrapper ведет себя странно

Я столкнулся с очень странной проблемой с virtualenv и virtualenvwrapper, которая поставила меня в тупик. Я разрабатываю приложения Django/Python на MacBook Air под управлением OS X 10.8.5. Вчера, совершенно неожиданно, когда я начал открывать новые окна консоли iTerm, я получил эти два сообщения:

-bash: GREP_OPTIONS: command not found
-bash: GREP_OPTIONS: command not found

Я сузил источник ошибки до этой строки в моем .bash_profile:

source /usr/local/bin/virtualenvwrapper.sh

Я не использую переменную среды GREP_OPTIONS ни в одном из моих «точечных» файлов. Когда я запускаю указанную выше исходную команду вручную, я получаю те же две ошибки.

После создания резервной копии virtualenvwrapper.sh я добавил «set -xv» вверху, повторно запустил его и обнаружил, что строка, генерирующая первое сообщение об ошибке, — это строка «if» в функции «function virtualenvwrapper_derive_workon_home»:

 if echo "$workon_home_dir" | (unset GREP_OPTIONS; command \grep '^[^/~]' > /dev/null)
then
    workon_home_dir="$HOME/$WORKON_HOME"
fi

Я увидел, что $workon_home_dir был правильно установлен в каталог моей виртуальной среды «/Users/[myname]/.virtualenvs».

Вот соответствующие строки в моем файле .bash_profile:

# .bash_profile
...
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi
...
# I do set the path before running virtualenvwrapper.sh
export PATH=/usr/local/pgsql/bin:$PATH
...
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
...

Прочитав инструкции по установке virtualenvwrapper, я попытался добавить эти две строки над исходной строкой, но безрезультатно:

# Path to my global python executable
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
# Path to virtualenv executable
export VIRTUALENWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv

Теперь, когда я ввожу команду «workon», я вижу список своих виртуальных сред, как и ожидалось. Однако, если я попытаюсь активировать один из них, например. мой "python" venv, делая "workon python", я вижу это!!

$ workon python
pydoc - the Python documentation tool

pydoc <name> ...
    Show test documentation...
    (... other lines of documentation ...)

Если я затем введу команду деактивации, я увижу те же строки pydoc, что и выше, плюс некоторые дополнительные сообщения, подобные этим:

-bash: _OLD_VIRTUAL_PATH: command not found
-bash: _OLD_VIRTUAL_PS1: command not found
-bash: VIRTUAL_ENV: command not found
-bash: -f: command not found
-bash: VIRTUALENVWRAPPER_LAST_VIRTUAL_ENV: command not found

Я попытался удалить и переустановить virtualenv и virtualenvwrapper с помощью pip, но это не решило проблему.

Что еще более странно, я заметил еще кое-что. Я помещаю все свои проекты Django в каталог Dropbox ~/www. День или два назад я заметил, что все мои проекты Django, которые были в этом каталоге и начинались с букв от «а» до «h», исчезли. Я не помню, чтобы вводил какие-либо команды, которые могли бы выборочно удалить эти каталоги проекта.

Это почти похоже на то, что, возможно, на моем диске появились поврежденные сектора, которые повредили один или несколько моих файлов virtualenvwrapper. Кто-нибудь знает, что может быть причиной этих проблем?

Спасибо.


person Jim    schedule 13.01.2014    source источник


Ответы (1)


Я сделал две вещи, чтобы решить эту проблему. Сначала я обновил свою ОС до OS X 10.9 и выполнил чистую установку. Это казалось проблемой, которая была внутри моей машины, и я не знал, как ее исправить. Но даже после чистой переустановки я продолжал видеть документацию Pydoc при запуске команды workon. В конце концов я сузил проблему до одного псевдонима, который был у меня в файле .bashrc:

alias unset="DJANGO_SETTINGS_MODULE="

Я создал этот удобный псевдоним, потому что были времена, когда эта переменная среды содержала старое значение, и мне нужен был способ легко сбросить его. Я до сих пор не понимаю, почему это вызвало проблему. Если я назову псевдоним иначе, чем «unset», проблема исчезнет.

person Jim    schedule 22.01.2014