web-dev-qa-db-ja.com

Djangoプロジェクト(virtualenvを使用しています)にDjango_SETTINGS_MODULEを正しく設定するにはどうすればよいですか?

DjangoプロジェクトのDjango_SETTINGS_MODULEの設定で問題が発生しています。

~/dev/Django-projectにディレクトリがあります。このディレクトリには、virtualenvで設定した仮想環境と、「onora」と呼ばれるアプリを含む「blossom」と呼ばれるDjangoプロジェクト)があります。実行中tree -L 3~/dev/Django-project/から次のことがわかります:

.
├── Procfile
├── blossom
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── fixtures
│   │   └── initial_data_test.yaml
│   ├── manage.py
│   ├── onora
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── admin.py
│   │   ├── admin.pyc
│   │   ├── models.py
│   │   ├── models.pyc
│   │   ├── tests.py
│   │   └── views.py
│   ├── settings.py
│   ├── settings.pyc
│   ├── sqlite3-database
│   ├── urls.py
│   └── urls.pyc
├── blossom-sqlite3-db2
├── requirements.txt
└── virtual_environment
    ├── bin
    │   ├── activate
    │   ├── activate.csh
    │   ├── activate.fish
    │   ├── activate_this.py
    │   ├── Django-admin.py
    │   ├── easy_install
    │   ├── easy_install-2.7
    │   ├── gunicorn
    │   ├── gunicorn_Django
    │   ├── gunicorn_paster
    │   ├── pip
    │   ├── pip-2.7
    │   ├── python
    │   └── python2.7 -> python
    ├── include
    │   └── python2.7 -> /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
    └── lib
        └── python2.7

コマンドを使用してデータベースからデータをダンプしようとしています

Django-admin.py dumpdata

私のアプローチはcd ~/dev/Django-projectを実行してからsource virtual_environment/bin/activateを実行してからDjango-admin.py dumpdataを実行することです

ただし、次のエラーが表示されます。

ImportError: Settings cannot be imported, because environment variable Django_SETTINGS_MODULE is undefined.

私はいくつかのグーグルをしてこのページを見つけました: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings

それは私に言う

Djangoを使用するときは、使用している設定を伝える必要があります。これを行うには、環境変数Django_SETTINGS_MODULEを使用します。 Django_SETTINGS_MODULEの値はPythonパス構文、例えばmysite.settingsにあります。設定モジュールはPythonインポート検索パスにあることに注意してください。

virtualenvでDjango_SETTINGS_MODULEを設定しますか? の提案に従って、行を追加しました

export Django_SETTINGS_MODULE="blossom.settings"
echo $Django_SETTINGS_MODULE

virtual_environment/bin/activateに移動します。ここで、仮想環境をアクティブにするためにactivateコマンドを実行すると、出力が表示されます。

Django_SETTINGS_MODULE set to blossom.settings

これは私には良さそうですが、今私が抱えている問題は

Django-admin.py dumpdata

次のエラーを返します。

ImportError: Could not import settings 'blossom.settings' (Is it on sys.path?): No module named blossom.settings

私は何を間違えていますか? thesys.pathを確認するにはどうすればよいですか?これはどのように機能するはずですか?

ありがとう。

35
Deonomo

最初のプロジェクト作成以外には、Django-admin.pyを実行しないでください。それ以降は、manage.pyを使用して、設定の検索を行います。

50
Daniel Roseman

私はちょうど同じエラーに遭遇し、最終的には何が起こっているかを解決することができました(大きな手がかりはImportError(Is it on sys.path?)でした)。

プロジェクトディレクトリをPYTHONPATHに追加する必要があります—これがドキュメントの意味です

設定モジュールは、Python import search path。

そのためには、実行します

$ export PYTHONPATH=$PYTHONPATH:$PWD

~/dev/Django-projectを実行する前にDjango-admin.pyディレクトリから。

このコマンドを($PWDをプロジェクトへの実際のパスi.e。~/dev/Django-project)に置き換えて、virtualenvのsourceスクリプトに追加できます。ある時点で virtualenvwrapper に進むことを選択した場合(このような状況に合わせて設計されています)、自動生成されたpostactivateフックスクリプトにexport PY...行を追加できます。

mkdjangovirtualenv これをさらに自動化し、Pythonパスに適切なエントリを追加しますが、私はそれを自分でテストしていません。

22
supervacuo

UNIXのようなマシンでは、次のようにvirtualenvのエイリアスを作成し、毎回入力する代わりにエイリアスを使用できます。

.bashrc

alias cool='source /path_to_ve/bin/activate; export Django_SETTINGS_MODULE=Django_settings_folder.settings; cd path_to_Django_project; export PYTHONPATH=$PYTHONPATH:$PWD'

12
zzart

私のお気に入りの選択肢は、pythonパッケージ構文のmanage.pyにランタイムパラメーターとして設定ファイルを渡すことです。

python manage.py runserver --settings folder.filename

詳細 Django docs

1
stelios

私はたくさんの答えがあることを知っていますが、これは記録のために私のために働いた。

  1. すべての仮想環境がある.virtual_envフォルダーに移動します。
  2. プロジェクト固有の環境フォルダーに移動します
  3. 設定フォルダーに保存されている個別の設定ファイルを使用している場合は、export Django_SETTINGS_MODULE=<Django_project>.settingsまたはexport Django_SETTINGS_MODULE=<Django_project>.settings.localを追加します。
0
Max

この問題に対処する別の方法は、python dotenvパッケージを使用し、他の環境変数とともに.envファイルにPYTHONPATHとDjango_SETTINGS_MODULEを含めることです。その後、manage.pyとwsgiを変更します。指示に記載されているとおりに.pyをロードします。

from dotenv import load_dotenv
load_dotenv()
0
aris