programing

모듈을 python에 "pythonport"한 다음 가져오기 후 코드를 변경하는 방법

newstyles 2023. 9. 11. 21:32

모듈을 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을 위해 감가상각됩니다.importlibPython 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