Каталог Adding к PYTHONPATH заставляет мой корневой каталог быть добавленным также

Я пытался добавить каталог /home/myname/bin к моему PYTHONPATH путем вставки следующего в мой .bashrc:

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

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

>>> 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']

Отметьте это echo $PYTHONPATH просто возвраты :/home/myname/bin.

1
задан 23 October 2015 в 01:54

1 ответ

Проблема состоит в том, что Вы включаете существующее значение PYTHONPATH. Та переменная, однако, не установлена, таким образом, она оценивает к пустой строке. По некоторым причинам это, кажется, делает python включайте Ваш $HOME dir. По-видимому, это - каталог по умолчанию:

$ 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']

Однако, если я установил PYTHONPATH к пустой строке, моему $HOME включен:

$ 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 при установке его это - поведение, которое Вы получаете:

$ 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']

Корректный способ установить его, только давая ему каталоги, которые Вы хотите добавить:

$ 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']

Или, чтобы быть на безопасной стороне в случае, если это когда-либо определяется, проверьте, пусто ли это, и действуйте соответственно:

if [ -d ~/bin ]; then
    [ -z "$PYTHONPATH" ] && 
        export PYTHONPATH="/home/myname/bin" ||
        export PYTHONPATH="$PYTHONPATH:/home/myname/bin"
fi
2
ответ дан 7 December 2019 в 13:52

Другие вопросы по тегам:

Похожие вопросы: