PYTHONPATH에 디렉토리를 영구적으로 추가 하시겠습니까?


324

를 사용할 때마다 sys.path.append새 디렉토리가 추가됩니다. 그러나 일단 파이썬을 닫으면 목록이 이전 (기본값?) 값으로 돌아갑니다. 디렉토리를 PYTHONPATH어떻게 영구적으로 추가 합니까?

답변:


135

이전 디렉토리와 PYTHONPATH콜론으로 구분 하여 환경 변수에 새 디렉토리를 추가해야합니다 . 유닉스의 모든 형태에서, 당신은 사용중인 쉘 ( .profile또는 좋아하는 쉘에 따라)에 해당하는 시작 스크립트에서 해당 쉘 에 의존하는 명령으로이를 수행 할 수 있습니다. Windows에서는 시스템 GUI를 통해이를 수행 할 수 있습니다.

superuser.com 선택한 플랫폼과 셸에서 환경 변수를 강화하는 방법에 대한 세부 정보가 필요한 경우 자세한 내용을 문의하는 것이 좋습니다. 실제로 프로그래밍 문제가 아니기 때문입니다.


8
에라타 : 윈도우의 구분 기호는 세미콜론입니다. Windows에서 시스템 경로를 대체해야하는 경우, 사용자 변수가 시스템 변수에 추가되므로 GUI를 통해 사용자 환경 변수로 설정하는 것만으로는 충분하지 않을 수 있습니다. 이 경우 필요한 조정을 수행하는 시작 스크립트를 사용해야합니다.
Nathan Ernst

1
당신이 (당신은 물론 관리자 인 경우) @Nathan, 세미콜론에 알림에 대한 TX,하지만 설정 시스템 창에 env.vars을 (플러스의 영업 이익은 방법을 요구하지 않습니다 무시 하는 얼마나 경로를 추가 그것에 따라서 env.var 사용자도 괜찮습니다!-).
Alex Martelli

불행히도 저는 업무용 PC 관리자가 아니므로 그러한 조치를 취해야합니다. :(
Nathan Ernst

439

bash (Mac 또는 GNU / Linux 배포판)를 사용하는 경우 bash를 ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

28
이것은 나를 위해 완벽하게 작동했지만 디렉토리가 디렉토리 구조 의 최상위 init .py 파일에 있는지 확인하십시오 . 이것은 처음에는 완벽하지 않았습니다. 예를 들어, PYTHONPATH = $ PYTHONPATH : / Users / joey / repos 내보내기를 시도했지만 repos 디렉토리에 _ init_ .py 가 없기 때문에 작동하지 않았습니다 . 한 디렉토리 아래로 내려 가면 / Users / joey / repos / specificRepo 가 트릭을 수행했습니다. 이제 파이썬은 init .py 를 포함하는 specificRepo 디렉토리에 연결된 하향 디렉토리를 통과 할 수 있습니다 !
Qiao Yi

3
이것은 나를 위해 일했지만이 PYTHONPATH 변수가 어디에 있는지 설명 할 수 있습니까? "export PYTHONPATH"는 정확한 파일을 찾는 방법을 어떻게 알 수 있습니까?
appleLover

42
편집 ~/.bashrc한 후 기억하고 다음을 실행 source ~/.bashrc하십시오. stackoverflow.com/questions/2518127/…
b_dev

2
sudo su.bashrc 파일을 시작할 때 나쁜 생각이라고 생각 합니다. 이 게시물에 동의합니다. 내 시스템에서는 최소한 필요조차 없습니다.
LondonRob

이것이 답입니다.
Aerin

88

조작하는 대신 경로 구성 파일을PYTHONPATH 만들 수도 있습니다 . 먼저 파이썬이이 정보를 검색하는 디렉토리를 찾으십시오.

python -m site --user-site

어떤 이유로 파이썬 2.7에서는 작동하지 않는 것 같습니다. 거기에서 사용할 수 있습니다 :

python -c 'import site; site._script()' --user-site

그런 다음 .pth추가하려는 경로가 포함 된 디렉토리에 파일을 작성하십시오 (없는 경우 디렉토리 작성).

예를 들면 다음과 같습니다.

# find directory
SITEDIR=$(python -m site --user-site)

# create if it doesn't exist
mkdir -p "$SITEDIR"

# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"

나는 파이썬 2.6을 사용하여 이것을 시도했지만 그것은 나를 위해 작동하지 않는 것
Lorcan O'Neill

4
이 디렉토리를 내 라이브러리 디렉토리에 심볼릭 링크하고 모든 스크립트를 거기에 저장했습니다. 잘 작동했습니다.
firesofmay

이 주제를 다시 찾은 후 다시 시도하여 이번에 위와 같이 작동하도록 해결했습니다! 공언 및 유언 사과 :)
Lorcan O'Neill

이것은 완벽하게 작동합니다. 나는 올바른 길을 python -m site --user-site가고 있었지만 (create the directory if it doesn't exist)부품 과 부품은 제대로 작동하지 않았습니다.
Aurélien Ooms

1
파이썬이 추가 경로를 인식하도록 추가 단계를 수행해야 somelib.pth합니까? 그렇지 않은 경우 왜 이것이 작동하지 않을 수 있을까요?
Miladiouss

38

이것은 Windows에서 작동합니다

  1. Windows에서는 Python 2.7을 사용하여 Python 설정 폴더로 이동하십시오.
  2. Lib / site-packages를여십시오.
  3. 이 폴더에 example.pth 빈 파일을 추가하십시오.
  4. 파일에 필요한 경로를 한 줄에 하나씩 추가하십시오.

그런 다음 스크립트에서 해당 경로 내의 모든 모듈을 볼 수 있습니다.


3
IMO는 쉘 또는 작업 환경의 선택에 의존하지 않기 때문에 가장 좋은 솔루션입니다. 기본 파이썬 경로가 "/usr/local/lib/pythonX.Y/site-packages"인 Linux에서도 작동합니다. 그래도 작동하지 않으면 .pth 파일을 dist-packages 디렉토리에 넣으십시오.
matus

1
윈도우 7, 파이썬 3.6.5. 이것이 답입니다. auserdude가 쓴 것처럼 : Python의 Lib / site-packages 폴더에 "example.pth"를 생성하고 다음과 같이 경로를 추가하십시오 : C : \ somefolder \ anotherfolder \ targetfolder
JayJay123

훌륭한 대답은 Windows 10에서 Python 3.7 과도 작동하며 Windows 10 경로는 "C : \ Users \ {usrName} \ AppData \ Local \ Programs \ Python \ Python37-32 \ Library"
Ali80

Windows 10의 Python 3.6.7에서 작동하는지 확인할 수 있습니다. 그러나 경로가 PYTHONPATH에 추가되면 이름 충돌시 추가 된 모듈을 찾을 수 없습니다.
BramAppel

25

여전히 혼란 스러울 경우-Mac 사용자 인 경우 다음을 수행하십시오.

  1. 터미널을여십시오
  2. 유형 open .bash_profile
  3. 나타나는 텍스트 파일에서 끝에 다음 줄을 추가하십시오. export PYTHONPATH=$PYTHONPATH:foo/bar
  4. 파일을 저장하고 터미널을 다시 시작하면 완료

2
파이썬의 경로를 보는 방법을 궁금해하는 사람은 다음
Arindam Roychowdhury

터미널도 다시로드해야합니다.
User

실제로 export열쇠는 내가 잃어버린 물건이었다! !!!, 공감, 감사합니다!
a_m_dev

21

pythonrc 파일을 통해 경로를 추가 할 수 있으며 Linux의 경우 ~ / .pythonrc가 기본값입니다. 즉.

import sys
sys.path.append('/path/to/dir')

당신은 또한 설정할 수 PYTHONPATH등 글로벌 rc 파일에 환경 변수를 ~/.profile맥이나 리눅스, 또는 제어판을 통해 -> 시스템 -> 고급 탭 -> 창에 환경 변수.


40
sys.path.append ( '/ path / to / dir')는 항목을 영구적으로 추가하지 않습니다.
jeremyjjbrown

15

(언급 한 바와 같이 조금 더 설명을 제공하기 위해, 파이썬은 자동으로 검색 경로를 구성합니다 이상여기 사용) site.py(일반적으로 sys.prefix +에있는 스크립트 lib/python<version>/site-packages뿐만 아니라 lib/site-python). sys.prefix의 값을 얻을 수 있습니다.

python -c 'import sys; print(sys.prefix)'

site.py 스크립트는 다음과 같은 플랫폼에 의존 디렉토리의 숫자를 추가 /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packages검색 경로 이러한 경로 검색 <package>.pth특정 추가 검색 경로를 포함 할 경우 구성 파일을. 예를 들어, easy-install 은 시스템 특정 파일에 추가 된 설치된 패키지 모음을 유지 관리합니다 (예 : Ubuntu it 's) /usr/local/lib/python2.7/dist-packages/easy-install.pth. 일반적인 시스템에는 sys.path의 예기치 않은 경로를 설명 할 수있는이 .pth 파일이 많이 있습니다.

python -c 'import sys; print(sys.path)'

따라서 .pth 파일을 만들고이 디렉토리 ( 위에서 언급 sitedir 포함) 중 하나에 넣을 수 있습니다 . 이것은 PYTHONPATH를 사용하는 대신 대부분의 패키지가 sys.path에 추가되는 방식 인 것 같습니다.

참고 : OSX에는 'framework builds'에 대해 site.py에 의해 추가 된 특별한 추가 검색 경로가 있습니다 (그러나 파이썬의 일반적인 명령 행 사용에서는 작동하는 것 같습니다) : /Library/Python/<version>/site-packages(예 : Python2.7 :) /Library/Python/2.7/site-packages/이것은 타사 패키지가있는 곳입니다. 설치 될 것입니다 (해당 디렉토리의 README 참조). 따라서 추가 검색 경로가 포함 된 경로 구성 파일을 추가 할 수 있습니다. 예 /Library/Python/2.7/site-packages/pip-usr-local.pth를 들어 /usr/local/lib/python2.7/site-packages/, 포함 하는 파일을 만든 다음 시스템 파이썬은 해당 검색 경로를 추가합니다.


10

나를 위해 .bash_profile파일을 변경했을 때 효과가 있었습니다. .bashrc파일을 변경 하면 셸을 다시 시작할 때까지만 작동했습니다.

파이썬 2.7의 경우 다음과 같아야합니다.

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

.bash_profile파일 의 끝에서 .


1
올바르게 이해하면 터미널을 통해 시작한 Python 세션에 대한 변수 만 내보낼 수 있습니까?
jxramos

1
@jxramos-그렇습니다!
피터 파이퍼

9

Linux에서는 환경 변수를 처리하지 않고도 패키지에서 PYTHONPATH 디렉토리로 심볼릭 링크를 작성할 수 있습니다. 다음과 같은 것 :

ln -s /your/path /usr/lib/pymodules/python2.7/

7

export PYTHONPATH="${PYTHONPATH}:/my/other/path"~ PYTHONPATH가 존재하지 않으면 ~ / .bashrc에 추가 해도 작동 하지 않을 수 있습니다 :.

export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"

위의 ~ / .bashrc에 위의 내용을 추가하면 우분투 16.04에서 트릭을 얻었습니다.


나는 echo PYTHONPATH했고 아무것도 나타나지 않았다 ! 즉,이 PYTHONPATH가 시작되지 않았으므로이 줄 export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection을 내 ~/.bashrc파일과 붙여 넣기 만하면 source ~/.bashrc 됩니다. 나중에`echo $ PYTHONPATH`했을 때 나에게 주었다. 내가 :<PATH_TO_TF>/TensorFlow/models/research/object_detection뭔가 잘못했는지에 대한 제안?
Anu

export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, PYTHONPATH를 처음으로 내보내는 경우 ${PYTHONPATH}:부분 없이 수행해야합니다
boyangeor

고마워하지만 컴퓨터를 재부팅 할 때마다 파이썬 경로는 1로 설정 :<PATH_TO_TF>/TensorFlow/models/research/object_detection하고 2를 제거합니다 export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim. 그것에 대한 제안, 그것을 고치는 방법?
Anu

7

MacOS에서는 특정 라이브러리에 대한 경로를 제공하는 대신. 루트 프로젝트 폴더의 전체 경로 제공

~/.bash_profile 

예를 들어,

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

이 후 :

source ~/.bash_profile

6

그냥 awesomo의 대답에 추가, 당신은 또한 그 선을에 추가 할 수 있습니다 ~/.bash_profile또는~/.profile


.bash_profile로그인 쉘을 사용 하는 경우 추가하십시오 . 그렇지 않으면 사용하십시오.profile
smac89

3

PYTHONPATH에 새 경로 추가는 다음을 통해 수동으로 수행됩니다.

터미널에서 ~ / .bashrc 프로파일에 경로를 추가하여 다음을 수행하십시오.

vim ~/.bashrc

다음을 프로필에 붙여 넣습니다.

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

그런 다음 터미널에서 코드를 실행할 때마다 bashrc 프로파일을 제공해야합니다.

source ~/.bashrc 

도움이 되었기를 바랍니다.


2

Windows Vista, Python 3.5에서 영구적으로 추가했습니다.

시스템> 제어판> 고급 시스템 설정> 고급 (탭) 환경 변수> 시스템 변수> (변수 열에 PYTHONPATH가 표시되지 않은 경우) (클릭) 새로 만들기> 변수 이름 : PYTHONPATH> 변수 값 :

변수 값으로 디렉토리를 작성하십시오. 그것은 Blue Peppers의 답변의 세부 사항입니다.


1

아래 스크립트는 순수한 파이썬이므로 모든 플랫폼에서 작동합니다. https://docs.python.org/3/library/pathlib.html에 설명되어있는 pathlib 경로 를 사용하여 크로스 플랫폼에서 작동합니다. 한 번만 실행하고 커널을 다시 시작하면됩니다. https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574에서 영감을 얻었습니다 .

from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path

if str(to_add) not in path:
    minLen=999999
    for index,directory in enumerate(path):
        if 'site-packages' in directory and len(directory)<=minLen:
            minLen=len(directory)
            stpi=index

    pathSitePckgs=Path(path[stpi])
    with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
        pth_file.write(str(to_add))

1

이것은이 스레드에 대한 업데이트이며 이전 답변이 있습니다.

MAC-OS 카탈리나 또는 더 새로운 (> = 10.15)을 사용하는 사람들 zsh을 위해 (이전의 대체) 새로운 터미널이 도입되었습니다 bash.

이 변경으로 인해 위의 답변에 약간의 문제가 있었고 파일을 만들고 ~/.zshrc파일 디렉토리를 $PATHand$PYTHONPATH

그래서 먼저

nano ~/.zshrc

에디터가 열렸을 때 다음 내용을 붙여 넣었습니다.

export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"

저장하고 터미널을 다시 시작했습니다.

중요 : 위의 경로는 내 컴퓨터의 경로로 설정되어 있으므로 파이썬에 맞게 조정해야합니다.


0

Python 3.6.4에서는 다음과 같이 파이썬 세션에서 sys.path를 유지할 수 있습니다.

import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")

root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")

sys.path.insert(0, root_dir)

print(str(sys.path))

virtualenv와 virtualenvwrapper를 사용하는 것이 좋습니다. 그렇지 않으면 경로가 복잡해질 것입니다.


-3

A <-> B 사이의 최단 경로는 직선입니다.

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.