3

IPython 0.13.1 をインストールしたところ、2 つの問題が発生しています。「アプリ」と呼ばれるアプリケーションを含む小さな「デモ」プロジェクトがあります。

.
├── 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) も試しましたが、成功しませんでした。私は何を間違っていますか?

私の 2 番目の問題は、autoreload の使用です。ドキュメントページを読んだ後、次のように有効にしました。

In [1]: %load_ext autoreload
In [2]: %autoreload 2

ここで、ドキュメントに示されているように、関数を含むテスト ファイル 'foo.py' を作成すると、その関数に加えた変更が IPython に反映されます。しかし、(上記のように) Customer クラスをインポートし、それに 2 番目のフィールド "lname" を追加してファイルを保存すると、その変更は IPython に反映されません。コマンド「Customer??」を実行しても、変更は表示されません。また、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のみを追加しましたCustomerimport app.modelsそれを解決するために追加できます。

あなたの2番目の問題は関連していると思います。実際のクラスを名前空間にインポートしたため、リロードしても役に立ちません。おそらくリロードすると、名前空間のモジュールが置き換えられるだけなので、models.Customer直接使用するのではなく参照する場合Customerは、ビジネスを行う必要があります。

于 2013-02-02T02:01:59.227 に答える