디렉토리로 cd하지 않고 명령 행에서 Python 스크립트를 사용하려면 어떻게해야합니까? PYTHONPATH입니까?


157

PYTHONPATH를 어떻게 사용합니까? 경로에서 스크립트를 실행하려고하면 파일을 찾을 수 없습니다. 스크립트를 보유한 디렉토리로 CD를 넣으면 스크립트가 실행됩니다. 그렇다면 PYTHONPATH는 무엇입니까?

$ echo $PYTHONPATH
:/home/randy/lib/python

$ tree -L 1 '/home/randy/lib/python' 
/home/randy/lib/python
├── gbmx_html.py
├── gbmx.py
├── __init__.py
├── __pycache__
├── scripts
└── yesno.py

$ python gbmx.py -h
python: can't open file 'gbmx.py': [Errno 2] No such file or directory

$ cd '/home/randy/lib/python'

파일 디렉토리로 cd 한 후 실행됩니다.

$ python gbmx.py -h
usage: gbmx.py [-h] [-b]

PYTHONPATH를 사용할 수없는 이유는 무엇입니까?


1
이 게시물의 제목을 변경할 수 있습니까? 실제로에 대한 설명을 요구하는 것은 아닙니다 PYTHONPATH.
Nico Cernek

인터넷 검색시 처음 표시되는 제목이므로 제목이 수정되었습니다.PYTHONPATH
raphael

답변:


194

조금 혼란 스러워요. PYTHONPATH는 파이썬 모듈 을 가져 오기 위한 검색 경로를 설정합니다 .

PYTHONPATH 모듈 파일의 기본 검색 경로를 보강합니다. 형식은 쉘의 PATH와 같습니다. os.pathsep로 구분 된 하나 이상의 디렉토리 경로 이름 (예 : Unix의 콜론 또는 Windows의 세미콜론). 존재하지 않는 디렉토리는 자동으로 무시됩니다.

일반 디렉토리 외에도 개별 PYTHONPATH 항목은 순수 Python 모듈 (소스 또는 컴파일 된 형식)을 포함하는 zip 파일을 참조 할 수 있습니다. zip 파일에서 확장 모듈을 가져올 수 없습니다.

기본 검색 경로는 설치에 따라 다르지만 일반적으로 prefix / lib / pythonversion으로 시작합니다 (위의 PYTHONHOME 참조). 항상 PYTHONPATH에 추가됩니다.

인터페이스 옵션 아래에 설명 된대로 추가 디렉토리가 PYTHONPATH 앞의 검색 경로에 삽입됩니다. 검색 경로는 Python 프로그램 내에서 변수 sys.path로 조작 할 수 있습니다.

http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH

당신이 찾고있는 것은 PATH입니다.

export PATH=$PATH:/home/randy/lib/python 

그러나 파이썬 스크립트를 프로그램으로 실행 하려면 첫 번째 줄에서 Python 의 shebang 을 설정해야합니다 . 이와 같은 것이 작동해야합니다.

#!/usr/bin/env python

그리고 실행 권한을 부여하십시오.

chmod +x /home/randy/lib/python/gbmx.py

그러면 gmbx.py어디에서나 쉽게 달릴 수 있습니다.


2
덕분에 친구. 나는 아직도 이것을 다림질하고 있습니다. 스크립트가 사용자 정의 PYTHONPATH에서 모듈을 가져 오는 데 성공했습니다. 이제 차이점을 이해합니다. 스크립트와 모듈에 관한 것입니다. 명령 스크립트 호출 대 파이썬 가져 오기. 네, 실제로 사용할 것입니다export PATH=$PATH:/home/etc
Randy Skretka

57

PATH와 PYTHONPATH를 혼동하고 있습니다. 이 작업을 수행해야합니다.

export PATH=$PATH:/home/randy/lib/python 

PYTHONPATH는 파이썬 인터프리터에서 어떤 모듈을로드할지 결정하는 데 사용됩니다.

쉘은 PATH를 사용하여 실행할 실행 파일을 결정합니다.


38

PYTHONPATHimport최상위 파이썬 인터프리터가 인수로 주어진 파이썬 파일을 조회하는 것이 아니라 명령문 에만 영향을 미칩니다 .

PYTHONPATH환경 변수에 의존하는 것이 있으면 다른 머신에 일관되게 복제하는 것이 까다로워 지므로 설정해야 할 필요 는 없습니다. 파이썬이 이미 알고있는 시스템 종속 경로에 설치 ( 'pip'또는 distutils 사용) 할 수있는 Python '패키지'를 사용하는 것이 좋습니다.

https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/- '히치하이커의 포장 안내서'및 http://docs.python.org/3/tutorial을 읽어보십시오. /modules.html-PYTHONPATH 및 패키지를 하위 레벨로 설명합니다.


요점을 알았어. 이 특별한 경우 PYTHONPATH에 추가하면 잘 작동하는 것 같습니다. 한 컴퓨터의 한 사용자로서 이미 작성된 .py 코드를 사용하고 재사용 할 수 있습니다.
랜디 Skretka

1
솔직히 루트 액세스가 필요한 시스템 종속 경로에 설치하는 것이 PYTHONPATH. pip install루트 액세스 권한이 없을 때뿐만 아니라 호스트의 일반 사용자 인 경우 (pip는 로컬 설치를 수행 할 수 있음을 알고 있음)를 주장하는 기본 Python 프로그램을 처리 해야하는 횟수를 더 이상 계산하지 않습니다. 핍없이. 다음은 Python 소프트웨어를 배포하는 모든 사람에게 유용한 조언입니다. 먼저 루트 액세스 권한이없고 pip없이 핵심 Python 배포 만하는 바닐라 Linux 호스트에 자신의 소프트웨어를 설치하십시오.
amn

3

PATH와 PYTHONPATH가 혼재되어 있다고 생각합니다. '스크립트'를 실행하려면 부모 디렉토리가 PATH 변수에 추가되어야합니다. 당신은 이것을 실행하여 이것을 테스트 할 수 있습니다

which myscript.py

또한 myscripy.py사용자 정의 모듈에 의존하는 경우 해당 상위 디렉토리도 PYTHONPATH 변수에 추가해야합니다. 불행히도, 파이썬 디자이너는 분명히 마약을 사용했기 때문에 다음과 같이 repl에서 수입품을 테스트한다고해서 PYTHONPATH가 스크립트에 사용되도록 올바르게 설정되어 있는지 확인할 수는 없습니다. 파이썬 프로그래밍 의이 부분은 마술이며 스택 오버 플로우에서 적절하게 대답 할 수 없습니다.

$python
Python 2.7.8 blahblahblah
...
>from mymodule.submodule import ClassName
>test = ClassName()
>^D
$myscript_that_needs_mymodule.submodule.py
Traceback (most recent call last):
  File "myscript_that_needs_mymodule.submodule.py", line 5, in <module>
    from mymodule.submodule import ClassName
  File "/path/to/myscript_that_needs_mymodule.submodule.py", line 5, in <module>
    from mymodule.submodule import ClassName
ImportError: No module named submodule

3

예제에서와 같이 PYTHONPATH를 설정하면 할 수 있어야합니다.

python -m gmbx

-m옵션은 경로에서 모듈을 파이썬으로 검색합니다. 파이썬은 일반적으로 PYTHONPATH에 추가 한 것을 포함하여 모듈을 검색합니다. 와 같은 인터프리터를 실행하면 python gmbx.py특정 파일을 찾고 PYTHONPATH가 적용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.