Das Hinzufügen eines Verzeichnisses zu PYTHONPATH führt dazu, dass auch mein Home-Verzeichnis hinzugefügt wird

Das Hinzufügen eines Verzeichnisses zu PYTHONPATH führt dazu, dass auch mein Home-Verzeichnis hinzugefügt wird

Ich habe versucht, das Verzeichnis /home/myname/binzu meinem PYTHONPATH hinzuzufügen, indem ich Folgendes in mein eingefügt habe .bashrc:

if [ -d ~/bin ]; then
    export PYTHONPATH=$PYTHONPATH:/home/myname/bin
fi

Leider scheint dies mein Home-Verzeichnis zum Suchpfad von Python hinzuzufügen, wie man sieht, wenn man die folgenden Befehle in Python ausführt:

>>> import sys
>>> sys.path

['', '/home/myname', '/home/myname/bin', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

Beachten Sie, dass echo $PYTHONPATHnur zurückgegeben wird :/home/myname/bin.

Antwort1

Das Problem besteht darin, dass Sie den vorhandenen Wert von einschließen PYTHONPATH. Diese Variable ist jedoch nicht festgelegt, sodass sie als leere Zeichenfolge ausgewertet wird. Aus irgendeinem Grund scheint dies dazu zu führen, dass pythonIhr $HOMEVerzeichnis eingeschlossen wird. Vermutlich ist dies das Standardverzeichnis:

$ python -c 'import sys; print sys.path'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

Wenn ich jedoch PYTHONPATHdie leere Zeichenfolge einstelle, $HOMEist meins enthalten:

$ PYTHONPATH=""; python -c 'import sys; print sys.path'
['', '/home/terdon', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

PYTHONPATHWenn Sie also beim Festlegen den aktuellen Wert einbeziehen , erhalten Sie folgendes Verhalten:

$ PYTHONPATH="$PYTHONPATH:$HOME/bin" python -c 'import sys; print sys.path'
['', '/home/terdon', '/home/terdon/bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

Die korrekte Einstellung erfolgt, indem Sie nur die Verzeichnisse angeben, die Sie hinzufügen möchten:

$ PYTHONPATH="$HOME/bin" python -c 'import sys; print sys.path'
['', '/home/terdon/bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

Oder prüfen Sie zur Sicherheit für den Fall, dass es jemals definiert wird, ob es leer ist, und handeln Sie entsprechend:

if [ -d ~/bin ]; then
    [ -z "$PYTHONPATH" ] && 
        export PYTHONPATH="/home/myname/bin" ||
        export PYTHONPATH="$PYTHONPATH:/home/myname/bin"
fi

verwandte Informationen