[python] 로컬 디렉토리에서 인터프리터로 파이썬 패키지 가져 오기

내 로컬 디렉토리에서 패키지를 개발 / 테스트 중입니다. 인터프리터 (v2.5)로 가져오고 싶지만 sys.path에 현재 디렉터리가 포함되어 있지 않습니다. 지금은 sys.path.insert(0,'.'). 더 좋은 방법이 있습니까?

또한,

from . import mypackage

이 오류로 실패합니다.

ValueError: Attempted relative import in non-package



답변

패키지의 일부로 가져온 모듈에서만 상대 가져 오기를 사용할 수 있습니다. 스크립트 또는 대화 형 인터프리터는 그렇지 않았으므로 물론 from . import( “내가 가져온 동일한 패키지에서 가져 오기”를 의미합니다.) 작동하지 않습니다. import mypackage의 상위 디렉토리를 확인하면 잘 될 것 mypackage입니다 sys.path(당신이 당신의 현재 디렉토리를 얻을 관리 방법 멀리 에서 sys.path나도 몰라? – 당신이 site.py에서 이상한 일이 있거나 할 …)

현재 디렉토리를 다시 가져 오는 sys.path것은 실제로 거기에 넣는 것보다 더 좋은 방법은 없습니다.


답변

sys.path에 대한 문서를 참조하십시오.

http://docs.python.org/library/sys.html#sys.path

인용하려면 :

스크립트 디렉토리를 사용할 수없는 경우 (예 : 인터프리터가 대화식으로 호출되거나 스크립트가 표준 입력에서 읽혀지는 경우) path [0]은 빈 문자열이며, 이는 Python이 먼저 현재 디렉토리에서 모듈을 검색하도록 지시합니다.

따라서 모듈이 포함 된 디렉토리에서 Python 인터프리터를 시작하는 경우 sys.path를 사용하여 원숭이를 만들 필요가 없습니다.

또한 패키지를 가져 오려면 다음을 수행하십시오.

import mypackage

패키지가 포함 된 디렉토리가 이미 sys.path에 있으므로 제대로 작동합니다.


답변

수정되지 않은 Python 스크립트를 실행하여 특정 로컬 디렉토리에서 라이브러리를 가져 오려면 PYTHONPATH환경 변수를 설정할 수 있습니다 ( 예 : bash에서).

export PYTHONPATH=/home/user/my_libs
python myscript.py

현재 작업 디렉토리에서 가져 오려면 다음 .표기법을 사용하십시오 .

export PYTHONPATH=.
python myscript.py


답변

간단하게 유지 :

 try:
     from . import mymodule     # "myapp" case
 except:
     import mymodule            # "__main__" case


답변

작동하게하는 간단한 방법은 파이썬의 -m플래그를 사용하여 부모 디렉토리에서 스크립트를 실행하는 것 python -m packagename.scriptname입니다. 분명히이 상황에서 __init__.py디렉토리를 패키지로 바꾸려면 파일 이 필요 합니다.


답변

패키지 내부에 setup.py 가 있으면 설치하는 것이 좋습니다.

pip install -e .


답변

사용 sys.path은 이미 현재 디렉토리를 포함해야합니다.

시험:

import .

또는:

from . import sth

그러나 좋은 습관이 아닐 수 있으므로 다음을 사용하지 마십시오.

import mypackage