2015-08-30 23 views
5

Kendi modülü yazdım olan izleyerek yapı olarak:Otomatik güncelleme modülü

mymodule/ 
├── __init__.py 
├── part1.py 
├── part2.py 
├── part3.py 
└── part4.py 

Ben IPython ve/veya jupyter dizüstü (eski ipython Notebook) kullanıyorum benim modülü test etmek için. Her zamanki gibi ben

import mymodule 

gibi modül ithalat ı part2.py bazı kodunu düzenlemek ve benim modülünün güncellenmiş sürümünü kullanmak istediğimizi varsayalım yapmak. İlk olarak sadece modülü yeniden import mymodule numaralı işi yeniden ithal ettiğimi düşündüm, ama işe yaramıyor. Modülü tamamen yeniden yüklemek için IPython'un kabuğunu kapatmalı veya jupyter'in çekirdeğini yeniden başlatmalı ve mymodule'u alarak tekrar başla. Ben böyle mymodule ithal ediyorum benim snippet'lerinin hem kullanma

%load_ext autoreload 
%autoreload 1 
%aimport mymodule 

:

Ancak docs reffering, ipython farklı modlar sağlar ve aşağıdaki gibi devreye girebileceği autoreload adlandırılan bir otomatik güncelleme fonksiyonu sağlar : hatta ipython ne de jupyter ne ben yapmalarını beklediğiniz yapıyoruz ve hala q zorunda autoreload 1 veya autoreload 2 aktive olan Bununla

%load_ext autoreload 
%autoreload 1 
%aimport mymodule 

import mymodule 

# let's do something with the module here 

, mymodule'un bir parçası olan part2.py'un düzenlenmiş kodunu kullanmak için IPython'un kabuğunu kullanın veya jupyter'in çekirdeğini yeniden başlatın.

Neyi yanlış yapıyorum? Bunun nasıl çalışması gerektiğine dair bir noktaya gelmedim.

+3

bir hata gibi geliyor, '% autoreload 2' kullanıyorum (aslında ipython_config.py'ye ekliyorum) ve çoğu durumda çalışır. Sadece çoklu kalıtım zahmetlidir. – dashesy

cevap

4

dashesy gibi %autoreload 2 değiştirin %autoreload 1, dedi yaşlı sürümü veya böcek.