Python 가 져 오기 모듈 에서 발생 한 오류 분석
1.모듈 이 설치 되 지 않 았 거나 경로 가 잘못 되 었 습 니 다.
ImportError: No mudule named myModule
두 가지 가능성 이 있 습 니 다.하 나 는 이 모듈 이 설치 되 어 있 지 않 아서 일반적으로 사용 할 수 있 습 니 다.pip install %module_name%
해결 하 겠 습 니 다.때때로 모듈 설치 패키지 이름 은 가 져 올 모듈 이름 과 같 지 않 습 니 다.이 경우 pip search|list 명령 을 통 해 정확 한 가방 을 찾 아 볼 수 있 습 니 다.다른 경 우 는 패키지 가 설치 되 어 있 지만 현재 실행 중인 프로그램 이 불 러 오 는 경로 가 잘못 되 었 다 는 것 이다.python 이 실 행 될 때 다음 위치 에서 python modules 를 불 러 오 려 고 시도 합 니 다.
*현재 디 렉 터 리
*환경 변수$PYTHONPATH 가 가리 키 는 값 입 니 다.이것 은":"로 구 분 된 문자열 입 니 다.각 하위 문자열 은 파일 시스템 의 경로 입 니 다.
*dist-site-packages 와 같은 표준 라 이브 러 리 디 렉 터 리 입 니 다.
*.pth 파일 에 지정 한 경로 입 니 다..pth 파일 이 존재 한다 면.
python 이 실 행 될 때의 포함 경 로 를 다음 과 같이 볼 수 있 습 니 다.
import sys
print(sys.path)
오류 가 발생 한 스 크 립 트 의 머리 에 이 코드 를 추가 한 다음 콘 솔 에서 인쇄 된 python 라 이브 러 리 경 로 를 확인 하고 설치 패키지 가 상기 경로 에 포함 되 어 있 는 지 확인 합 니 다.***경로 에 포함 되 지 않 은 모듈 을 아래 방식 으로 임시로 포함 시 킬 수 있 습 니 다:***
sys.path.append("path/to/module")
또한 셸 창 에서 현재 python 포함 경 로 를 볼 수 있 습 니 다.echo $PYTHONPATH
2.존재 하 는 모듈 을 가 져 올 수 없습니다.가 져 올 모듈 에 native 코드 가 포함 되 어 있 고 native 코드 로 딩(초기 화)에 실 패 했 을 때 이 오류 가 발생 할 수 있 습 니 다.ssl,gevent 등 native 와 관련 된 모듈 을 사용 할 때,대응 하 는 native 프로그램 이 설치 되 어 있 지 않 으 면 이러한 오류 가 발생 할 수 있 습 니 다.
또 다른 오 류 는 상대 경 로 를 사용 하여 가 져 올 때 부모 모듈 을 가 져 오지 못 했 습 니 다.다음 코드 참조:
main.py
mypackage/
__init__.py
mymodule.py
myothermodule.py
my module.py 는 다음 과 같다.
#!/usr/bin/env python3
# Exported function
def as_int(a):
return int(a)
# Test function for module
def _test():
assert as_int('1') == 1
if __name__ == '__main__':
_test()
그리고 my othermodule 코드 는 다음 과 같 습 니 다.
#!/usr/bin/env python3
from .mymodule import as_int
# Exported function
def add(a, b):
return as_int(a) + as_int(b)
# Test function for module
def _test():
assert add('1', '1') == 2
if __name__ == '__main__':
_test()
my package/my othermodule 을 실행 하면 다음 과 같은 오 류 를 보고 합 니 다.Traceback (most recent call last):
File "myothermodule.py", line 3, in
from .mymodule import as_int
SystemError: Parent module '' not loaded, cannot perform relative import
[이 글](\#Relative imports in Python 3)은 더 자세 한 해답 을 내 놓 았 다.
3.반복 가 져 오기
이 오 류 를'circular(or cyclic)imports'라 고 합 니 다.python 만 의 가 져 오기 오류 입 니 다.자바 와 같은 언어 에는 존재 하지 않 습 니 다.
다음 두 개의 파일 이 있다 고 가정 합 니 다.a.py 와 b.py:
#a.py
print "a in"
import sys
print "b imported: %s" % ("b" in sys.modules, )
import b
print "a out"
print b.x
그리고:
#b.py
print "b in"
import a
print "b out"
x = 3
python a.py 를 실행 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
$ python a.py
a in
b imported: False
b in
a in
b imported: True
a out
Traceback (most recent call last):
File "a.py", line 4, in <module>
import b
File "/home/shlomme/tmp/x/b.py", line 2, in <module>
import a
File "/home/shlomme/tmp/x/a.py", line 7, in <module>
print b.x
AttributeError: 'module' object has no attribute 'x'
이런 상황 이 발생 한 이 유 는 순환 가 져 오기 때문이다.순환 가 져 오기 및 가 져 오 는 과정 에서 python 이 잠 금 동작 을 하 였 으 며,결국 모듈 b 가 져 오지 않 았 을 때 그 이름 을 참조 하 였 습 니 다.가 져 오기 오류 가 순환 가 져 오기 때 문인 지 판단 합 니 다.스 택 에 두 번 반복 되 는 가 져 오기 가 있 는 지 확인 합 니 다.예 를 들 어 상기 스 택 에서 a.py 가 두 번 나타 나 기 때문에 이 파일 로 인 한 순환 가 져 오기 로 판단 할 수 있 습 니 다.
이 문 제 를 해결 하려 면 모듈 을 하나의 자원 으로 보고 도입 할 모든 모듈 에 대해 번 호 를 매 긴 다음 에 정적 자원 정렬 법 에 따라 순서대로 가 져 오 면 순환 가 져 오 는 것 을 피 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.