Могу ли я автоматически изменять свой PYTHONPATH при активации / деактивации virtualenv?

StackOverflow https://stackoverflow.com/questions/969553

  •  13-09-2019
  •  | 
  •  

Вопрос

Я хотел бы иметь другой PYTHONPATH, отличный от моего обычного, в конкретном virtualenv.Как мне настроить это автоматически?Я понимаю, что можно взломать bin/activate файл, есть ли лучший / более стандартный способ?

Это было полезно?

Решение

Это django-сообщения пользователей вероятно, это вам очень поможет.Это предполагает использование virtualenvwrapper ( виртуальная оболочка ) чтобы обернуть virtualenv, использовать add2virtualenv добавление2virtualenv команда.Используя это, когда среда активна, вы можете просто вызвать:

add2virtualenv directory1 directory2 ...

чтобы добавить каталоги в ваш pythonpath для текущей среды.

Он автономно обрабатывает изменения пути при переключениях среды.Никакой черной магии не требуется.Et voila!

Другие советы

Вот взломанная версия bin/activate для справки.Он правильно устанавливает PYTHONPATH, но сброс настроек не работает.


# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate () {
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
        PATH="$_OLD_VIRTUAL_PATH"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi  

    # This should detect bash and zsh, which have a hash command that must
    # be called to get it to forget past commands.  Without forgetting
    # past commands the $PATH changes we made may not be respected
    if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
        hash -r
    fi  

    if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
        PS1="$_OLD_VIRTUAL_PS1"
        export PS1 
        unset _OLD_VIRTUAL_PS1
    fi  

    if [ -n "$_OLD_PYTHONPATH" ] ; then
        PYTHONPATH="$_OLD_PYTHONPATH"
        export PYTHONPATH 
        unset _OLD_PYTHONPATH
    fi  

    unset VIRTUAL_ENV
    if [ ! "$1" = "nondestructive" ] ; then
    # Self destruct!
        unset deactivate
    fi  
}

# unset irrelavent variables
deactivate nondestructive
VIRTUAL_ENV="env_location" # Anonymized
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

_OLD_VIRTUAL_PS1="$PS1"
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
    # special case for Aspen magic directories
    # see http://www.zetadev.com/software/aspen/
    PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
else
    PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
export PS1

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
    hash -r
fi

_OLD_PYTHONPATH="$PYTHONPATH"
PYTHONPATH="new_pythonpath" #Anonymized
export PYTHONPATH
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top