모듈을 파이썬으로 "다시 가져 오기"하는 방법, 가져 오기 후 코드 변경


87

나는 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했지만 여전히 운이 없습니다.

런타임에서 업데이트 된 코드를 다시 가져 오는 방법을 알 수 있습니까?


답변:


116

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)

23
사실, 그냥 "다시로드 (foo는)"- 재 속성이 필요
jsbueno

2
나는 그것을 작동시킬 수 없었다. TypeError : reload () 인수는 모듈이어야합니다
Burak

2
@Burak, reload모듈에 전달하는 인수 입니까?. 예. 당신은 일을해야 import foo사전
존 라 Rooy

27
당신이 한 경우 참고 from foo import *하거나 from foo import bar, 심볼이 foo정의되지 않습니다. 당신은 필요 import sysreload(sys.modules['foo'])혹은reload(sys.modules[bar.__module__])
drevicko

3
Python 2.x를 최대한 빨리 죽이고 Python 2.x 지원을 중단하십시오! python 2.x pythonclock.org 사용 중지 카운트 다운 .
Martijn van Wezel

65

gnibbler의 답변 외에도 :

이것은 Python 3에서 다음과 같이 변경되었습니다.

>>> import imp
>>> imp.reload(foo)

@onnodb가 지적했듯이 Python 3.4 이후로 imp더 이상 사용되지 않습니다 importlib.

>>> import importlib
>>> importlib.reload(foo)

5
작은 참고 사항 : Python 3.x 이후 버전에서 "imp"는 "importlib"대신 사용되지 않습니다. 그래도 같은 방식으로 작동합니다.
onnodb

54

IPython3의 자동 새로 고침 기능이 제대로 작동합니다.

웹 페이지의 실제 예제를 사용하고 있습니다. 먼저 '자동 새로 고침'기능을로드합니다.

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

43을 반환하도록 some_function을 변경합니다.

In []: some_function()
Out[]: 43

1
푸 수입 some_function에서, Jupyterlab 파이썬 3.7.3에서 작업 작동하지 않습니다
로버트 노박

7

이것이 자동으로 발생하도록하려면 iPython 과 함께 제공되는 자동 새로 고침 모듈이 있습니다.


푸 수입 some_function에서, Jupyterlab 파이썬 3.7.3에서 작업 작동하지 않습니다
로버트 노박
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.