DjangoシェルからPythonスクリプトを実行する必要があります。私は試した:
./manage.py shell << my_script.py
しかし、それはうまくいきませんでした。私が何かを書くのを待っていました。
DjangoシェルからPythonスクリプトを実行する必要があります。私は試した:
./manage.py shell << my_script.py
しかし、それはうまくいきませんでした。私が何かを書くのを待っていました。
回答:
<<
一部が間違っている、使用して<
代わりに:
$ ./manage.py shell < myscript.py
あなたも行うことができます:
$ ./manage.py shell
...
>>> execfile('myscript.py')
python3の場合は、使用する必要があります
>>> exec(open('myscript.py').read())
./manage.py shell <<EOF\ execfile('myscript.py') \EOF
echo 'import myscript' | python manage.py shell
です。これは、manage.py
コマンドを作成するという面倒なプロセスを実行する必要がなく、1度実行するだけの簡単なスクリプトに役立つことがわかりました。
Get-Content myscript.py | .\manage.py shell
shell
- から行うことはお勧めしません。これは、django環境からランダムスクリプトを実際に実行するべきではないためです(ただし、これにはいくつかの方法があります。他の回答を参照してください)。
これはあなたが複数回実行されることをスクリプトであれば、それはとしてそれを設定することをお勧めしますカスタムコマンドすなわち
$ ./manage.py my_command
これを行うには、のサブディレクトリにファイルを作成management
し、commands
あなたのapp
、すなわち
my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
このファイルでカスタムコマンドを定義します(ファイルの名前が実行元のコマンドの名前になるようにします./manage.py
)
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, **options):
# now do the things that you want with your models here
NoArgsCommand
は非推奨です。このページには、作業例を示します:docs.djangoproject.com/en/1.9/howto/custom-management-commands/...
def handle_noargs(self, **options):
する必要がありましたdef handle(self, **options):
。
def handle(self, **options):
、Jamesのコメントのように変更します。
Django 1.7以降を使用している人にとっては、設定モジュールをインポートするだけでは十分ではないようです。
少し掘り下げた後、私はこのスタックオーバーフローの答えを見つけました: https //stackoverflow.com/a/23241093
次のことを行う必要があります。
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
# now your code can go here...
上記を行わずに、私は得ていました django.core.exceptions.AppRegistryNoReady
エラーが発生しました。
私のスクリプトファイルは、djangoプロジェクトと同じディレクトリにあります(つまり、manage.pyと同じフォルダーにあります)。
DJANGO_SETTINGS_MODULE
環境変数ですでに参照されている設定ファイルがあります。これで、import django ; django.setup()
1.7未満で十分でした。
django.setup()
ないと、スクリプトはDjangoモデルにアクセスできず、インポートもされません!
import django; django.setup()
。
私はパーティーに遅れましたが、私の返答が誰かを助けることを願っています:これはPythonスクリプトで行うことができます:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
残りの部分はここに移動します....
sys.path.append
ものをドロップできることにも注意してくださいDJANGO_SETTINGS_MODULES
(たとえば、スクリプトがサイトルートのすぐ上にある場合は、実行できますos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
)。
sys.path.append(os.getcwd())
私は私のプロジェクトのディレクトリ内だとき、それは動作しますが、私のDJANGO_SETTINGS_MODULEが正確であると私はその輸入モデル、ビューなどのスクリプトを実行しようと、
runscript
django-extensionsから
python manage.py runscript scripty.py
script.py
それをテストするサンプル:
from django.contrib.auth.models import User
print(User.objects.values())
http://django-extensions.readthedocs.io/en/latest/command_extensions.htmlで言及され、次の場所で文書化されています。
python manage.py runscript --help
チュートリアルもあります。
Django 1.9.6、django-extensions 1.6.7でテスト済み。
django-extensions
(必要な場合)の最良の回答です。注:runscript
標準のdjangoを使用しているように見えshell
ます。shell_plus
単純なスクリプトのすべてをインポートする必要がなかったので(拡張機能でも)使用されていたら素晴らしいでしょう。
DJANGO_SETTINGS_MODULE
環境変数を設定してスクリプトを実行するだけです。Djangoシェル環境をセットアップするために必要なのはこれだけです。
これはDjango> = 1.4で動作します
スクリプトに多くのコマンドがない場合は、次のコマンドを使用します。
manage.py shell --command="import django; print(django.__version__)"
他の回答が示すが明示的には述べていないため、実際に必要なのは、Djangoシェルからスクリプトを実行する必要はなく、Djangoシェルを使用せずにアプリにアクセスすることです。。
これは、DjangoのバージョンとDjangoのバージョンで大きく異なります。このスレッドで解決策が見つからない場合は、ここで回答してください 。manage.pyシェルを使用せずにモデルオブジェクトにアクセスするDjangoスクリプト または同様の検索が役立つ場合があります。
私はmy_command.pyを
import os,sys
sys.path.append('/path/to/myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file")
import django
django.setup()
import project.app.models
#do things with my models, yay
そして走った python3 my_command.py
(Django 2.0.2)
sys.path.append('/path/to/myproject')
てBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
`と` sys.path.append(BASE_DIR)。また、コマンドを実行する前に仮想環境をアクティブにすることを忘れないでください!
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
django.setup()
仮想環境を使用している場合は、これを試してください:-
python manage.pyシェル
これらのコマンドを使用するには、仮想環境内にいる必要があります。この使用のため:-
workon vir_env_name
例えば :-
dc@dc-comp-4:~/mysite$ workon jango
(jango)dc@dc-comp-4:~/mysite$ python manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
注:-ここでmysiteは私のウェブサイト名で、jangoは私の仮想環境名です
他の方法では、これを実行します:
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
これはPython2.7とDjango1.9で動作しています
djangoシェルは、django環境でpythonモジュールを実行するための良い方法ですが、モジュールをインポートして、特に自動補完なしで関数を手動で実行するのは、常に簡単で面倒なことではありません。これを解決するために、小さなシェルスクリプト「runscript.sh」を作成しましたに、Linuxコンソールのオートコンプリートとログ履歴を最大限に活用できる。
注意:runscript.shをルートプロジェクトにコピーし、実行権限を設定します(chmod + x)
例:myapp / do_folder /のモジュールdo_somethings.pyでshow(a、b、c)という名前のPython関数を実行したい
標準のdjangoの方法(manage.pyシェル):
python3 manage.py shell
> from myapp.do_folder import do_somethings
> do_somethings.show("p1", "p2" , 3.14159)
スクリプトあり(runscript.sh):
./runscript.sh myapp/do_folder/do_somethings.py show p1 p2 3.14159
スクリプトは引数の数に制限はありません。ただし、プリミティブ型の引数(int、float、string)のみがサポートされています
django.setup()が動作していないようです。
も必要ないようです。
これだけでうまくいきました。
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
django
機能するのではなく、実際に何をしたいですか?