0

次のような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__.pydevelopment.pytesting.pyproduction.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_testtesting.py でのテストで動作します

env_devdevelopment.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に基づいて行われました。

ありがとう。よろしくお願いします

4

2 に答える 2

1

を設定export DJANGO_SETTINGS_MODULE="taskbuster.settings.testing"しましたが、上記の設定は の下にあると言いますroot_project/settings。したがって、あなたの設定を正しく理解している場合は、設定ディレクトリを というディレクトリの下に移動する必要がありますtaskbuster

もちろん、より迅速な代替手段は、env var を次のように変更することです。export DJANGO_SETTINGS_MODULE="settings.testing"

ディレクトリ構造に関して何を望むかによって異なります。

于 2015-05-13T23:07:19.050 に答える
0

postactivate と predeactivate を編集した後、環境を再アクティブ化する必要があります。env_dev にいるときは、次のいずれかを実行できます。

$workon env_test   //change to another env and come back
$Workon env_dev

また

$deactivate  //just deactivate and activate the concerned env
$workon env_dev

これはうまくいくはずです。

于 2015-12-18T18:08:00.480 に答える