PYTHONPATH에 디렉터리를 추가하면 내 홈 디렉터리도 추가됩니다.

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

문제는 기존 값을 포함한다는 것입니다 PYTHONPATH. 그러나 해당 변수는 설정되지 않았으므로 빈 문자열로 평가됩니다. 어떤 이유로 python귀하의 $HOME디렉토리를 포함시키는 것 같습니다. 아마도 이것이 기본 디렉터리일 것입니다.

$ 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빈 문자열로 설정하면 my $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

관련 정보