Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何定制Django manage.py shell?_Python_Django_Django Manage.py_Manage.py - Fatal编程技术网

Python 如何定制Django manage.py shell?

Python 如何定制Django manage.py shell?,python,django,django-manage.py,manage.py,Python,Django,Django Manage.py,Manage.py,几乎每次在Django中使用manage.py shell时,我都希望导入某些东西。例如,我想从models.py模块导入*。目前,我的工作是将所有导入放在一个名为s.py的文件中,然后在启动shell后键入execfile('s.py') 如何自定义manage.py,使其在启动shell时自动进行导入?我正在使用Django 1.4。多谢各位 编辑:我正在添加更多细节,以使我的问题更清楚 以下是我最初所做的: bash> python manage.py shell >>&

几乎每次在Django中使用manage.py shell时,我都希望导入某些东西。例如,我想从models.py模块导入*。目前,我的工作是将所有导入放在一个名为s.py的文件中,然后在启动shell后键入execfile('s.py')

如何自定义manage.py,使其在启动shell时自动进行导入?我正在使用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.
每次启动shell时键入4行样板文件都很烦人。所以我把这4行放在一个文件
s.py
中。现在我这样做:

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

我也想去掉
execfile('s.py')
。我想让
manage.py
在启动shell时自动执行这些导入。

我认为您不应该覆盖默认的shell或manage.py命令,因为您将在其他地方使用它们。如果您有本地设置文件,您可能希望将其添加到本地设置文件中,但如果不小心,最终可能会导致循环导入。您还应该编写自己的shell扩展

选中此项:

https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/shells.py
shell子命令只调用一个交互式Python解释器,因此将PYTHONSTARTUPUNIX环境变量指向包含所需导入的文件就可以了。顺序如下:

user@linux$ export PYTHONSTARTUP='/path/to/my/django/pythonStartup.py'; python ./manage.py shell
其中,pythonStartup.py是任意命名的,您可以随意命名它,包括s.py(尽管这可能不是它的最佳名称)。=:)

您还可以在您的个人档案中为其创建以下方便别名:

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\u配置文件

以下是当我运行python3./manage.py shell时发生的情况,PYTHONSTARTUP环境变量正确指向我希望导入的文件:

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]:
编辑:

另外一个我忘了提的提示

如果将pythonStartup.py放在Django项目的根目录中,则按如下方式创建别名:

alias django-shell="export PYTHONSTARTUP='./pythonStartup.py'; python ./manage.py shell"
允许您cd到当前正在处理的任何Django项目的根目录,别名将调用该特定项目的pythonStartup.py。此方法增加了灵活性。

检查,它提供了一个
shell\u plus
管理命令,可自动为已安装的应用程序导入所有型号:

user@host:~/git/project (devel)$ ./manage.py shell_plus
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from custom_app1.models import MyModel1
from custom_app2.models import MyModel2
from custom_app3.models import MyModel3
# Shell Plus Django Imports
from django.utils import timezone
from django.conf import settings
from django.core.cache import cache
from django.db.models import Avg, Count, F, Max, Min, Sum, Q, Prefetch, Case, When
from django.core.urlresolvers import reverse
from django.db import transaction
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
请注意,还将导入自定义应用程序模型。

有一个django扩展供您使用,即它的

1。pip安装django扩展

2。将“django extensions”添加到您的设置中。py的已安装应用程序[]


3。运行命令>>>>python manage.py shell_plus

创建一个新的shell命令并不难,它可以对原始shell命令进行子类化和阴影化,并运行任意代码

我肯定这一定是个坏主意。。。但这很容易!我用它

下面是一个例子:

从django.core.management.commands.shell导入命令作为shell命令
类命令(ShellCommand):
def ipython(自身,选项):
打印(“提醒-这是JOHN的黑客外壳”)
从IPython导入开始\u IPython
脚本“在启动时运行”
从django.conf导入设置
从my_app.models导入MyModel
预期的_变量=['In'、'Out'、'get_-ipython'、'exit'、'quit'、'expected_-variables']
可用的_变量=[k表示局部变量中的k().keys(),如果k[0]!='_'和k不在预期的_变量中]
打印(f'\\n可用变量:\\n{可用变量})
"""
argv=['-c',脚本在启动时运行'-i']
启动伊皮顿(argv)

现在把它放在一个名为“代码> shell .pY.P/>的命令文件中,通常你不想从XXXX中导入Inix,因为这可能会导致其他模块SpPiPrimiPiZa的问题:在这个上下文中,导入*是很好的,因为我在一个交互式shell中做它。@ Serimeta语言你考虑使用Python启动UNIX环境变量吗?(如下面的答案所示)?这。将
PYTHONSTARTUP
添加到我的
.env
文件中,允许我在启动shell时导入所需的所有内容,而无需安装任何其他应用程序。与
shell\u plus
相比,我更喜欢此解决方案。