4

ほとんどの場合、Django で manage.py シェルを使用するたびに、特定のものをインポートしたいと考えています。たとえば、models.py モジュールから * をインポートしたいと考えています。現在、私の回避策は、すべてのインポートを s.py という名前のファイルに入れ、シェルを起動した後に execfile('s.py') と入力することです。

シェルの起動時にインポートが自動的に行われるように、manage.py をカスタマイズするにはどうすればよいですか? Django 1.4 を使用しています。ありがとうございました。

編集:質問をより明確にするために、詳細を追加しています。

これが私が最初にしたことです:

bash> python manage.py shell
>>> from mysite.app.models import *
>>> from mysite.app2.models import *
>>> import decimal
>>> D = decimal.Decimal
# Now I am ready to work in this shell.

シェルを起動するたびにボイラープレートを 4 行入力するのは面倒です。そのため、これらの 4 行をファイルに入れましたs.py。今私はこれを行います:

bash> python manage.py shell
>>> execfile('s.py')
# Now I am ready to work.

私も脱ぎたいですexecfile('s.py')manage.pyシェルの起動時にこれらのインポートを自動的に実行したいと考えています。

4

5 に答える 5

1

シェルサブコマンドは、対話型の Python インタープリターを呼び出すだけなので、必要なインポートを含むファイルをPYTHONSTARTUP UNIX 環境変数で指定するだけで機能します。シーケンスは次のとおりです。

user@linux$ export PYTHONSTARTUP='/path/to/my/django/pythonStartup.py'; python ./manage.py shell

pythonStartup.pyには任意の名前が付けられ、 s.pyを含め、好きな名前を付けることができます(ただし、これはおそらく最適な名前ではありません)。=:)

個人用の.bash_profileで、次の便利なエイリアスを作成することもできます。

alias django-shell="export PYTHONSTARTUP='/path/to/my/django/pythonStartup.py'; python ./manage.py shell"

そして、単にそれを使用します:

user@linux$ . ${HOME}/.bash_profile  # Normally you don't need to do this step.
user@linux$ django-shell

これで、 pythonStartup.pyファイルを編集して、必要な変更をインポート動作に組み込み、エイリアスを実行するだけで済みます (... .bash_profileを編集または再ソースする必要はありません)。

PYTHONSTARTUP 環境変数がインポート元のファイルを適切に指している状態でpython3 ./manage.py シェルを実行すると、次のようになります。

user@linux$ python3 ./manage.py shell
Python 3.5.1 |Anaconda custom (64-bit)| (default, Dec  7 2015, 11:16:01) 
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

Importing base set of modules often used ...

import sys, os, random, pprint, operator
import time, math
import numpy, numpy as np
import numpy.linalg
import scipy, scipy as spimport scipy.optimize
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
import pandas as pd
import sklearn.datasets
import sklearn.feature_extraction
import sklearn.linear_model
import sklearn.neighbors
import sklearn.cluster
import sklearn.preprocessing
import sklearn.decomposition
import gensim.models.word2vec

In [1]:

編集:

私が言及するのを忘れていた追加のヒント。

Django プロジェクトのルート ディレクトリにpythonStartup.pyを配置する場合は、次のようにエイリアスを作成します。

alias django-shell="export PYTHONSTARTUP='./pythonStartup.py'; python ./manage.py shell"

現在作業中の Django プロジェクトのルート ディレクトリにcdで移動でき、エイリアスはその特定のプロジェクトのpythonStartup.pyを呼び出します。このアプローチにより、柔軟性が高まります。

于 2016-05-18T17:12:50.187 に答える
0

デフォルトの shell や manage.py コマンドを上書きすべきではないと思います。他の場所でそれらを使用することになるからです。ローカル設定ファイルがある場合は、それらをローカル設定ファイルに追加することをお勧めしますが、注意しないと循環インポートになってしまう可能性があります。また、シェルに独自の拡張機能を作成する必要があります

これをチェックして:

https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/shells.py
于 2013-06-25T00:35:00.133 に答える