IPython 서브모듈 새로고침
현재 서브모듈을 포함하고 numpy/scipy를 사용하는 python 프로젝트를 진행하고 있습니다.Ipython은 대화형 콘솔로 사용됩니다.유감스럽게도 현재 사용하고 있는 워크플로우가 마음에 들지 않습니다만, 몇 가지 조언을 해 주시면 감사하겠습니다.
한 IPython에 됩니다.import
명령어를 입력합니다. 중 인 코드 한 경우가 .이 시점에서 모델이 이미 로드되어 IPython을 사용하여 모델과 상호 작용합니다.
현재 프레임워크에는 서로 의존하는 많은 모듈이 포함되어 있습니다.즉, 프레임워크가 처음 로드되었을 때 메인 모듈이 서브모듈을 Import 및 설정합니다.됩니다.reload(main_mod.sub_mod)
모든 변경된 모듈을 풀패스를 사용하여 개별적으로 새로고침해야 하기 때문에 번거롭습니다.만약 그렇다면 매우 편리할 것이다.reload(main_module)
또한 모든 서브모듈을 새로고침하지만 numpy/scipy는 새로고침하지 않습니다.
IPython에는 다음과 같은 자동 새로고침 매직이 포함되어 있습니다.
%load_ext autoreload
%autoreload 2
새 회선을 실행하기 전에 변경된 모든 모듈을 새로고침합니다. 하는 은 조금 , 이렇게 하다 보면.dreload
몇 가지 됩니다. 라고 입력합니다.%autoreload?
뭐가 잘못될 수 있는지 보려고요
하게 하는 는, 「」를 합니다.~/.ipython/profile_default/ipython_config.py
및 [1] 추가:
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']
아래 코멘트를 통해 @Kos에게 크레딧을 보내드립니다.
[이 없는 경우~/.ipython/profile_default/ipython_config.py
ipython profile create
번째, 파일 는 첫번번번 be first첫번번 。 또는 파일이 다음 위치에 있을 수 있습니다.$IPYTHONDIR
.
이름이 allow인 모듈이 내부 Import에 액세스합니다.특히 다음과 같은 기능을 제공합니다.
import importlib
importlib.reload(my_module)
대반와는 %autoreload
,importlib.reload()
모듈로 설정된 글로벌 변수도 리셋합니다.대부분의 경우, 그것은 당신이 원하는 것입니다.
importlib
Python 3.1 이후만 사용할 수 있습니다.이전 버전의 경우 모듈을 사용해야 합니다.
이 함수의 모든 경고 목록(재귀적 새로고침, 오래된 객체의 정의가 남아 있는 경우 등)을 얻으려면 의 설명서를 읽는 것이 좋습니다.
IPython 0.12(및 그 이전)에서는, 다음을 사용할 수 있습니다.
%load_ext autoreload
%autoreload 2
이는 기본적으로 pv의 답변과 동일합니다.단, 확장자 이름이 변경되어 다음 명령을 사용하여 로드됩니다.%load_ext
.
인지 어느 쪽도 아니다%autoreload
,도 아니다dreload
어떤 노트북에서 다른 노트북으로 코드를 Import할 때 이 상황에 맞는 것 같습니다.플레인 Python만reload
삭제:
reload(module)
[1]에 근거합니다.
IPython은 모든 서브모듈을 재귀적으로 새로고침합니다.개인적으로 저는 magic 명령어를 사용하는 것을 선호합니다(단, John Salvatier가 코멘트에서 지적한 바와 같이 완전 새로고침은 하지 않습니다).
http://shawnleezx.github.io/blog/2015/08/03/some-notes-on-ipython-startup-script/
이러한 매직 함수를 반복 입력하지 않도록 ipython 시작 스크립트에 입력합니다(.ipython/profile_default/startup 아래에 .py 접미사를 붙여 이름을 지정합니다).이 폴더 아래의 모든 python 스크립트는 다음과 같이 어휘 순서에 따라 로드됩니다.
from IPython import get_ipython
ipython = get_ipython()
ipython.magic("pylab")
ipython.magic("load_ext autoreload")
ipython.magic("autoreload 2")
이거 어때:
import inspect
# needs to be primed with an empty set for loaded
def recursively_reload_all_submodules(module, loaded=None):
for name in dir(module):
member = getattr(module, name)
if inspect.ismodule(member) and member not in loaded:
recursively_reload_all_submodules(member, loaded)
loaded.add(module)
reload(module)
import mymodule
recursively_reload_all_submodules(mymodule, set())
이렇게 하면 지정한 모듈 및 서브모듈 트리 전체가 효과적으로 새로고침됩니다.이 기능을 .ipythonrc(내 생각에)에 넣을 수도 있기 때문에 인터프리터를 시작할 때마다 로딩됩니다.
은 '새로고침'을 연 에 두 입니다.IPython
:
from IPython.lib.deepreload import reload
%load_ext autoreload
%autoreload 2
.reload(module_name)
아직 검토하지 않은 클래스 메서드가 새로고침되지 않아 설명할 수 없는 문제가 발생하는 경우는 거의 없습니다.
모듈을 Import하기 전에 다음 행이 포함됩니다.여기서 첫 번째 테스트에서는 자동 새로고침 확장이 이미 로드되었는지 여부를 테스트합니다.
if 'autoreload' not in get_ipython().extension_manager.loaded:
%load_ext autoreload
%autoreload 2
import sys
.
.
.
다른 옵션:
$ cat << EOF > ~/.ipython/profile_default/startup/50-autoreload.ipy
%load_ext autoreload
%autoreload 2
EOF
Ubuntu 14.04의 ipython 및 ipython3 v5.1.0으로 확인.
긴 스레드에 다른 답변을 추가하고 싶지는 않지만 다른 사용자가 유용하다고 생각할 수 있는 서브모듈을 재귀적으로 새로고침할 수 있는 솔루션을 찾았습니다(어차피 있습니다).
del
에서 중 sys.modules
iPython:
In[1]: from sys import modules
In[2]: del modules["mymodule.mysubmodule"] # tab completion can be used like mymodule.<tab>!
스크립트는 다음 서브모듈을 재귀적으로 새로고침합니다.
In[3]: %run myscript.py
의 「 」는, 「 」로 되어 있는 것에 해 주세요.autoreload
변경된 파일을 수동으로 저장하는 경우(예를 들어 Ctrl+s 또는 cmd+s 사용) IntelliJ에서만 작동합니다.자동저축에서는 작동하지 않는 것 같아요.
Anaconda의 Jupyter 노트북에서 다음을 수행합니다.
%load_ext autoreload
%autoreload 2
이 메시지를 작성했습니다.
자동 새로고침 확장이 이미 로드되었습니다. , 다음과 같이
%reload_ext autoreload
다음과 같은 작업을 수행하는 것이 더 나을 것 같습니다.
%reload_ext autoreload
%autoreload 2
버전 정보:
노트북 서버의 버전은 5.0.0으로 동작하고 있습니다.Python 3.6.2 | Anaconda , Inc . | (디폴트, 2017년 9월 20일, 13:35:58) [MSC v.1900 32비트 (인텔)]
이로 인해 서브 오브젝트가 새로고침되지 않으므로 IPython의 deepreload를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/5364050/reloading-submodules-in-ipython
'programing' 카테고리의 다른 글
jQuery는 더 많은 파라미터를 콜백에 전달합니다. (0) | 2023.01.24 |
---|---|
어레이를 SimpleX로 변환하는 방법ML (0) | 2023.01.24 |
MySQLworkbench 연결 인코딩을 UTF8로 설정하는 방법 (0) | 2023.01.24 |
암호화로 보호된 토큰 생성 (0) | 2023.01.24 |
판다의 발생을 세는 가장 효율적인 방법은 무엇일까요? (0) | 2023.01.24 |