virtualenvwrapper меняет поведение cd и работает с mkproject

Я попытался изменить поведение cd по умолчанию с помощью virtualenvwrapper с помощью инструкций здесь: http://virtualenvwrapper.readthedocs.org/en/latest/tips.html

и поместив код в мою папку.virtualenvs и постактивировать и постдеактивировать файлы.

postactivate:

#!/bin/bash
# This hook is sourced after every virtualenv is activated.

cd () {
    if (( $# == 0 ))
    then
        builtin cd $VIRTUAL_ENV
    else
        builtin cd "$@"
    fi
}

cd

сообщение деактивировать:

#!/bin/bash
# This hook is sourced after every virtualenv is deactivated.

cd () {
    builtin cd "$@"
}

Однако, похоже, он не работает должным образом, и теперь, когда я использую workon project он не переходит автоматически в папку проекта, указанную в файле.project (что можно сделать с помощью mkproject команда.

(Обратите внимание, если уместно, я использую zshell & prezto)

1 ответ

Рецепт, который вы опубликовали, не должен делать то, что вы ожидаете. Что он на самом деле делает, это то, что всякий раз, когда вы печатаете cd без какого-либо пути в терминале он перемещается к корневому каталогу virtualenv вместо домашней папки.

Я бы порекомендовал вам настроить проекты virtualenvwrapper, чтобы вы могли отделить свою кодовую базу от virtualenv (вместо этого используйте файл требований для переносимости!). Т.е. добавить в свой файл оболочки

PROJECT_HOME='path/to/your/projects/folder'

Чтобы mkproject создаст path/to/your/projects/folder/[PROJECT_NAME] папка для вас и workon автоматически перейдет в него.

Однако, если вы не хотите использовать проекты, вы должны изменить свой сценарий постактивации следующим образом, чтобы добиться того, чего вы хотите:

cd $VIRTUAL_ENV
Другие вопросы по тегам