我刚刚安装了 IPython 0.13.1 并且遇到了两个问题。我有一个小的“演示”项目,其中包含一个名为“app”的应用程序:
.
├── 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,导入我的 Customer 类,并尝试重新加载模型模块,我会收到以下错误:
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 设置中。我也试过 reload(app) 和 reload(models) 没有成功。我究竟做错了什么?
我的第二个问题是使用自动重载。阅读文档页面后,我这样启用它:
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:
我究竟做错了什么?这是这里讨论的 AppCache 问题吗?我尝试实现显示的脚本,但运行它时会引发错误。谢谢。