반응형
질문
나는 종종 파이썬 인터프리터에서 내 모듈을 테스트하며, 오류를 발견하면 빠르게 .py 파일을 업데이트합니다. 그러나 이를 인터프리터에 반영하는 방법은 어떻게 해야 할까요? 지금까지는 파일을 다시 가져오는 것이 제대로 작동하지 않아 인터프리터를 종료하고 다시 시작해 왔습니다.
답변
Python3에 대한 업데이트: (이미 답변 받은 답변에서 인용됨, 여기서 마지막 편집/댓글은 사용하지 않는 방법을 제안했습니다)
Python 3에서는
reload
가imp
모듈로 이동되었습니다. 3.4에서는imp
가importlib
을 선호하도록 사용되었고,reload
가 후자에 추가되었습니다. 3 이상을 대상으로 할 때는reload
를 호출할 때 적절한 모듈을 참조하거나 가져와야 합니다.
요약:
- Python3 >= 3.4:
importlib.reload(packagename)
- Python3 < 3.4:
imp.reload(packagename)
- Python2: 아래 계속
reload
내장 함수를 사용하세요:
https://docs.python.org/2/library/functions.html#reload
reload(module)
이 실행될 때:
- Python 모듈의 코드가 다시 컴파일되고 모듈 수준의 코드가 다시 실행되어 모듈의 사전에 이름에 바인딩된 새로운 객체 집합이 정의됩니다. 확장 모듈의 init 함수는 두 번 호출되지 않습니다.
- Python에서 다른 모든 객체와 마찬가지로, 기존 객체는 참조 카운트가 0이 될 때까지만 회수됩니다.
- 모듈 네임스페이스의 이름은 새로운 또는 변경된 객체를 가리키도록 업데이트됩니다.
- 기존 객체에 대한 다른 참조(모듈 외부의 이름과 같은)는 새로운 객체를 참조하도록 다시 바인딩되지 않으며, 해당하는 각 네임스페이스에서 업데이트해야 합니다.
예제:
# "version 1"을 출력하는 간단한 함수 만들기
shell1$ echo 'def x(): print "version 1"' > mymodule.py
# 모듈 실행
shell2$ python
>>> import mymodule
>>> mymodule.x()
version 1
# mymodule을 "version 2"를 출력하도록 변경 (python REPL에서 나가지 않고)
shell2$ echo 'def x(): print "version 2"' > mymodule.py
# 동일한 python 세션에서
>>> reload(mymodule)
<module 'mymodule' from 'mymodule.pyc'>
>>> mymodule.x()
version 2
반응형
댓글