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

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를 사용할 수없는 이유는 무엇입니까?



답변

조금 혼란 스러워요. 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어디에서나 쉽게 달릴 수 있습니다.


답변

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

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

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

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


답변

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

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

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


답변

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


답변

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

python -m gmbx

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


답변