모듈을 python에 "pythonport"한 다음 가져오기 후 코드를 변경하는 방법
저는.foo.py
def foo():
print "test"
IPython에서 다음을 사용합니다.
In [6]: import foo
In [7]: foo.foo()
test
그 다음에 제가 바꿨습니다.foo()
대상:
def foo():
print "test changed"
IPython에서 호출 결과는 여전히test
:
In [10]: import foo
In [11]: foo.foo()
test
그러면 다음을 사용합니다.
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
삭제합니다.foo.pyc
같은 폴더에foo.py
존재하지만, 여전히 운이 없습니다.
업데이트된 코드를 런타임에 다시 가져올 수 있는 방법을 알 수 있습니까?
Python 2.x용
reload(foo)
Python 3.x용
import importlib
import foo #import the module here, so that it can be reloaded.
importlib.reload(foo)
아이파이썬3의 자동 재로드 기능은 제대로 작동합니다.
저는 웹페이지의 실제 예시를 사용하고 있습니다.먼저 'autoreload' 기능을 로드합니다.
In []: %load_ext autoreload
In []: %autoreload 2
그런 다음 테스트할 모듈을 가져옵니다.
In []: import foo
In []: foo.some_function()
Out[]: 42
편집기에서 foo.py 을 열고 some_function을 변경하여 43을 반환합니다.
In []: foo.some_function()
Out[]: 43
기능을 직접 가져오는 경우에도 작동합니다.
In []: from foo import some_function
In []: some_function()
Out[]: 42
some_function을 변경하여 43을 반환합니다.
In []: some_function()
Out[]: 43
그니블러의 답변 외에도:
파이썬 3에서는 다음과 같이 변경되었습니다.
>>> import imp
>>> imp.reload(foo)
@onnodb가 지적한 바와 같이,imp
을 위해 감가상각됩니다.importlib
Python 3.4 이후:
>>> import importlib
>>> importlib.reload(foo)
이것이 자동적으로 발생하기를 원한다면 iPython과 함께 제공되는 자동 재로드 모듈이 있습니다.
[15]에서 대신del foo
,사용하다
import sys
del sys.modules["foo"]
모듈 캐시에서 식품을 삭제하다
언급URL : https://stackoverflow.com/questions/4111640/how-to-reimport-module-to-python-then-code-be-changed-after-import
'programing' 카테고리의 다른 글
데이터베이스 트리거가 필요합니까? (0) | 2023.09.11 |
---|---|
Powershell Write-Host를 텍스트 파일에 추가 - 컴퓨터 이름 및 타임 스탬프 (0) | 2023.09.11 |
MySQL - NULL safe not equal 연산자 (0) | 2023.09.11 |
GCC: 배열 유형에 불완전한 요소 유형이 있습니다. (0) | 2023.09.11 |
도커: $PATH에서 실행 파일을 찾을 수 없습니다. (0) | 2023.09.11 |