내 로컬 디렉토리에서 패키지를 개발 / 테스트 중입니다. 인터프리터 (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