次のような2つの仮想環境が存在するプロジェクトがあります。
(env_dev)
開発用(env_test)
テスト用
これら 2 つの仮想環境の異なる構成で実行したいと考えています。私のテスト環境では、ライブラリまたはパケット(セレンなど)が必要になりますが、開発環境では必要ない可能性があります...
上記によると、この方法の要件ファイルと設定ファイルに関連して、次のディレクトリ構造があります。
要件ファイル (root_project/requirements)
私はファイルを持っています:
- root_project/requirements/base.txt は、すべての環境に共通のすべてのパッケージになります。他の要件ファイルはそれを継承します
- root_project/requirements/development.txt、開発ローカル環境に必要なパッケージのみ
- root_project/requirements/production.txt、本番環境用のパッケージのみ
- root_project/requirements/testing.txt、テスト環境に必要なパッケージのみ
- root_project/requirements/staging.txt、念のためステージング環境のパッケージ
さらに、各要件ファイルにパッケージを記述した後、次の方法でテスト環境と開発環境にパッケージをインストールします。
$ workon env_dev
$ pip install -r requirements/development.txt
$ workon env_test
$ pip install -r requirements/testing.txt
仮想環境ごとに異なる設定 (テストと開発)
次に、環境ごとに異なる設定ファイルを管理するために、root_project フォルダー内に設定フォルダーを作成します。
root_project/settingsには以下が含まれます。
__init__.py
このフォルダを Python パッケージにするためのファイル
base.py
すべての環境で共通のすべての設定が含まれます。他の設定ファイルはこれを継承しています。
development.py
ローカル開発用です。
testing.py
テスト用です。
production.py
本番環境で使用されます。
staging.py
私のプロジェクトの運用サーバーでステージング バージョンを実行する場合に備えて。
ファイル__init__.py
、development.py
、testing.py
、production.py
およびstaging.py
は、base.py から継承するために次の行で編集しました (まだ作成されません)。
# -*- coding: utf-8 -*-
from .base import *
そして、私の root_project/name_project/ django で、デフォルトでsettings.py
ファイルを作成します。このファイルは、root_project/settings ディレクトリに移動し、名前を base.py に変更しました。このファイル settings.py が私の base.py になるからです。
virtualenvwrapper を使用して、ファイルが特定の仮想環境で動作するように指定します。
env_test
testing.py でのテストで動作します
env_dev
development.py で動作します
各仮想環境 (テストおよび開発) の各パス [$VIRTUAL_ENV/bin] で、このファイル (development.py および settings.py) を使用するように構成し、次のような postactivate ファイルと predeactivate ファイルにフォーカスします。
env_dev 環境で
パスに移動し$VIRTUAL_ENV/bin
、postactivate ファイルを編集して次を追加します。
export DJANGO_SETTINGS_MODULE="taskbuster.settings.development"
また、$VIRTUAL_ENV/bin
パスに移動し、predeactivate ファイルを編集して次を追加します。
unset DJANGO_SETTINGS_MODULE
env_test 環境で
パスに移動し$VIRTUAL_ENV/bin
、postactivate ファイルを編集して次を追加します。
export DJANGO_SETTINGS_MODULE="taskbuster.settings.testing"
predeactivate ではなく、postactivate ファイルに追加しただけです。
このプロセスがすべて機能するかどうかを確認したい場合、 env_dev 環境をアクティブ化すると、この出力が得られます
(env_dev)➜ taskbuster_project ./manage.py runserver
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/site-packages/django/core/management/__init__.py", line 303, in execute
settings.INSTALLED_APPS
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/home/bgarcial/.virtualenvs/tb_dev/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2231, in _gcd_import
File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
File "<frozen importlib._bootstrap>", line 2189, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 2231, in _gcd_import
File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
File "<frozen importlib._bootstrap>", line 2201, in _find_and_load_unlocked
ImportError: No module named 'taskbuster.settings'
(env_dev)➜ taskbuster_project
私の env_test 環境では、同じ状況が発生します。エラー構成がありますか。
この質問の行数については、皆さんに申し訳ありません。追加データとして、このすべてのプロセスは、念のため、この完全な完全なチュートリアルhttp://www.marinamele.com/taskbuster-django-tutorial/settings-different-environments-version-controlに基づいて行われました。
ありがとう。よろしくお願いします