Ich habe versucht, das Verzeichnis /home/myname/bin
zu 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 $PYTHONPATH
nur 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 python
Ihr $HOME
Verzeichnis 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 PYTHONPATH
die leere Zeichenfolge einstelle, $HOME
ist 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']
PYTHONPATH
Wenn 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