2016-07-06 9 views
0

Ich war mit virtualenv die ganze Zeit und dann hatte ich auch Anakonda installiert. Gerade habe ich versucht, eine virtuelle Umgebung mit der Art von Anaconda wie source activate helloworld zu aktivieren. (Tatsächlich erinnere ich mich nicht, ob das genau der Befehl ist, den ich eingegeben habe). Und dann war die Umgebung aktiviert. Aber als ich das Notebook laufen ließ, hieß es, dass einige Bibliotheken nicht existierten, selbst wenn ich sie bereits in dieser Umgebung installiert hätte. Bis dahin wurde mir klar, dass ich die falsche Umgebung aktiviert hatte. Und dann schließe ich die Registerkarte und cd zu hellowworld und tat source bin/activate. Aber es war zu spät. Ich habe dies als die Ausgabe prepending /home/lcc/anaconda3/envs/bin to PATH und die Umgebung wurde nicht erwartet aktiviert. Wissen Sie, wie Sie dieses Problem lösen können? Vielen Dank!Wie löst man das Problem des Konflikts von Anakonda und Virtualenv

Hier ist der vollständige Inhalt der activate Datei unter /hello/world:

#!/bin/bash 

# Determine the directory containing this script 
if [[ -n $BASH_VERSION ]]; then 
    _SCRIPT_LOCATION=${BASH_SOURCE[0]} 
    SHELL="bash" 
elif [[ -n $ZSH_VERSION ]]; then 
    _SCRIPT_LOCATION=${funcstack[1]} 
    SHELL="zsh" 
else 
    echo "Only bash and zsh are supported" 
    return 1 
fi 
_CONDA_DIR=$(dirname "$_SCRIPT_LOCATION") 

if [ $# -gt 1 ]; then 
    (>&2 echo "Error: did not expect more than one argument.") 
    (>&2 echo " (Got [email protected])") 
    return 1 
fi 

case "$(uname -s)" in 
    CYGWIN*|MINGW32*|MSYS*) 
     EXT=".exe" 
     ;; 
    *) 
     EXT="" 
     ;; 
esac 

# Export whatever PS setting we have, so it is available to Python subprocesses 
export PS1 

# Ensure that this script is sourced, not executed 
# Also note that errors are ignored as `activate foo` doesn't generate a bad 
# value for $0 which would cause errors. 
if [[ -n $BASH_VERSION ]] && [[ "$(basename "$0" 2> /dev/null)" == "activate" ]]; then 
    (>&2 echo "Error: activate must be sourced. Run 'source activate envname' 
instead of 'activate envname'. 
") 
    "$_CONDA_DIR/conda" ..activate $SHELL$EXT -h 
    exit 1 
fi 

"$_CONDA_DIR/conda" ..checkenv $SHELL$EXT "[email protected]" 
if (($? != 0)); then 
    return 1 
fi 

# Ensure we deactivate any scripts from the old env 
# Note: this empties [email protected] Preserve a copy. 
[email protected] 
source "$_CONDA_DIR/deactivate" 

_NEW_PATH=$("$_CONDA_DIR/conda" ..activate $SHELL$EXT "$args") 
if (($? == 0)); then 
    export CONDA_PATH_BACKUP="$PATH" 
    # export this to restore it upon deactivation 
    export CONDA_OLD_PS1=$PS1 

    export PATH="$_NEW_PATH" 
    # Get first path (should be full path prefix of our env) 
    # inner string extraction pulls off first path 
    # outer string removes /bin if present (on Unix) 
    firstpath=${PATH%%:*} 
    export CONDA_DEFAULT_ENV="$(echo ${firstpath} | sed "s|/bin$||")" &>/dev/null 
    # Legacy support: CONDA_DEFAULT_ENV used to be either env name or full path if given as path. 
    # CONDA_DEFAULT_ENV is now always full path. 
    # Keep CONDA_ENV_PATH around, and have it mirror CONDA_DEFAULT_ENV. 
    # Last date of change: 2016-04-18 
    export CONDA_ENV_PATH=$CONDA_DEFAULT_ENV 

    export PS1="$("$_CONDA_DIR/conda" ..setps1 $SHELL$EXT "$args")" 

    # Load any of the scripts found $PREFIX/etc/conda/activate.d AFTER activation 
    _CONDA_D="${CONDA_DEFAULT_ENV}/etc/conda/activate.d" 
    if [[ -d "$_CONDA_D" ]]; then 
     IFS=$(echo -en "\n\b")&>/dev/null && for f in $(find "$_CONDA_D" -iname "*.sh"); do source "$f"; done 
    fi 
else 
    return $? 
fi 

if [[ -n $BASH_VERSION ]]; then 
    hash -r 
elif [[ -n $ZSH_VERSION ]]; then 
    rehash 
else 
    echo "Only bash and zsh are supported" 
    return 1 
fi 

Antwort

3

Es ist nicht klar, aus Ihrer Frage, was Sie „aktivieren“ zu tun erwarten. Aktiviert es ein virtualenv oder aktiviert es eine Conda-Umgebung?

Wenn Sie Miniconda oder Anaconda installieren, haben Sie die Möglichkeit, PATH hinzuzufügen. Wenn du das tust, dann kommt es wahrscheinlich immer vor deinem virtualenv-Skript an. Sie können das eine oder das andere umbenennen, oder erstellen Sie einen Alias ​​für den Virtualenv, der ihn mit einem absoluten Pfad zum Aktivierungsskript aufruft. Sie können Anaconda auch so verschieben, dass es angehängt anstatt vorangestellt wird, aber dann wird immer die virtualenv-Aktivierung verwendet und nicht die conda-Eins (ohne absolute Pfade).

Um Conda Pfad suchen, in ~/.bashrc oder ~/.bash_profile und ändern

export PATH=<anaconda path>:$PATH 

zu

export PATH=$PATH:<anaconda path> 
anhängen