我剛剛安裝了IPython 0.13.1,並遇到兩個問題。我有一個包含所謂的「應用程序」應用程序中的小「示範」項目:如何使用IPython重新加載和自動重新加載?
.
├── app
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── models.py
│ ├── models.pyc
│ ├── tests.py
│ └── views.py
├── demo
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ └── wsgi.py
└── manage.py
models.py包含:
from django.db import models
class Customer(models.Model):
fname = models.CharField(max_length=25)
我的第一個問題是重裝models.py文件我做一個後更改。如果我打開IPython中,導入我的客戶類,並嘗試重新加載模型模塊,我得到這個錯誤:
In [1]: from app.models import Customer
In [2]: reload(app.models)
--------------------------------------------------
NameError Traceback(most recent call last)
/Users/me/dotfiles/.virtualenvs/demo/lib/.../shell.pyc in <module>()
----> 1 reload(app.models)
NameError: name 'app' is not defined
雖然我是新來的Python,我相信,「模型」是模塊,並我在我的INSTALLED_APPS設置。我也嘗試重新加載(應用程序)和重新加載(模型)沒有成功。我究竟做錯了什麼?
我的第二個問題是使用自動重載。閱讀文檔頁面後,我能這樣說:
In [1]: %load_ext autoreload
In [2]: %autoreload 2
現在,如果我創建一個測試文件「foo.py」,在它的一些功能如文檔說明,任何改變我作出這個函數反映在IPython中。但是,如果我導入我的Customer類(如上所示)併爲其添加第二個字段「lname」並保存該文件,則該更改不會反映在IPython中。如果我運行命令「客戶??」,則更改不會顯示。另外,如果我運行aimport命令,我看到:
In [5]: %load_ext autoreload
In [6]: %autoreload 2
In [7]: %aimport
Modules to reload:
all-except-skipped
Modules to skip:
我在做什麼錯?這是討論here的AppCache問題嗎?我嘗試實現顯示的腳本,但是當我運行它時會引發錯誤。謝謝。
當我實現你的第一個建議時,我看到一個很長的模型列表被重新加載,但是當它到達'select'時我得到一個ValueError:「無法配置過濾器'require_debug_false':'DictConfigurator'類型的對象沒有len ()。我會再去找更多的。 – William
我一直在追蹤這個錯誤,當重載到'select'時,會產生一個ValueError,它發生在autoreload.py的第243行:superreload(m, reload,self.old_objects)ValueError:無法配置過濾器'require_debug_false':'DictConfigurator'類型的對象沒有len()。我不知道如何解決這個問題。 – William
有趣的是,如果我加載autoreload擴展並添加字段'lname'到Customer類,我會看到新的字段,如果我做了「Customer?」。但是,如果我嘗試創建一個新的Customer對象並加載此字段,則會得到「TypeError:'lname'關鍵字參數對於這個功能。「我懷疑這是因爲重新加載無法正常工作。 – William