2013-06-24 42 views
4

幾乎每次我在Django中使用manage.py shell時,我想要導入某些東西。例如,我想從我的models.py模塊導入*。目前,我的工作是將所有導入放在一個名爲s.py的文件中,然後在啓動shell之後輸入execfile('s.py')。如何自定義Django manage.py shell?

如何自定義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時自動執行這些導入。

+1

通常情況下,您不希望從xxxx導入*,因爲這會導致其他模塊出現問題。 – PepperoniPizza

+1

PepperoniPizza:導入*在這種情況下很好,因爲我在交互式shell中執行此操作。 – SerMetAla

+0

@SerMetAla您是否考慮過使用PYTHONSTARTUP UNIX環境變量(如下面的答案所示)? –

回答

0

我想你不應該重寫默認的shell或manage.py命令,因爲你要在其他地方使用它們。如果你有一個本地設置文件,你可能想把它們添加到你的本地設置文件中,但是如果你不小心的話,你最終會得到循環導入。你也應該寫自己的擴展殼

檢查:

https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/shells.py 
0

子命令只是調用一個交互式的Python解釋器,所以指向PYTHONSTARTUP UNIX環境變量設置爲包含一個文件您所需的進口將工作。這裏是序列:

[email protected]$ 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" 

,然後簡單地使用:= :)

您也可以在您的個人的.bash_profile創建下列便利別名

[email protected]$ . ${HOME}/.bash_profile # Normally you don't need to do this step. 
[email protected]$ django-shell 

現在,你只需要編輯pythonStartup.py文件,以合併您可能需要的導入行爲的任何更改,並簡單地運行別名(...無需編輯或重新輸入您的.bash_profile)。

這是我運行python3 ./manage時發生的情況。PY殼與PYTHONSTARTUP環境變量正確地指出,我要進口來自文件:

[email protected]$ 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。該方法增加了靈活性。

相關問題