3

我刚刚安装了 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 问题吗?我尝试实现显示的脚本,但运行它时会引发错误。谢谢。

4

1 回答 1

2

对于您的第一个问题,您不能reload(app.models)因为您没有添加app.models到您的命名空间。您只添加了Customer. 你可以添加import app.models来解决这个问题。

我认为你的第二个问题是相关的。由于您将实际类导入命名空间,因此重新加载无济于事。大概重新加载只是替换了命名空间中的模块,所以如果你引用models.Customer而不是直接使用Customer你应该是在做生意。

于 2013-02-02T02:01:59.227 回答