Je ne parviens pas à configurer Django_SETTINGS_MODULE pour mon projet Django.
J'ai un répertoire à ~/dev/Django-project
. Dans ce répertoire, j'ai un environnement virtuel que j'ai configuré avec virtualenv, ainsi qu'un projet Django appelé "blossom" contenant une application appelée "onora". Lancer tree -L 3
à partir de ~/dev/Django-project/
me montre ce qui suit:
.
├── 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
J'essaie de vider mes données de la base de données avec la commande
Django-admin.py dumpdata
Mon approche consiste à exécuter cd ~/dev/Django-project
puis à exécuter source virtual_environment/bin/activate
puis à exécuter Django-admin.py dumpdata
Cependant, j'obtiens l'erreur suivante:
ImportError: Settings cannot be imported, because environment variable Django_SETTINGS_MODULE is undefined.
J'ai fait quelques recherches sur Google et j'ai trouvé cette page: https://docs.djangoproject.com/fr/dev/topics/settings/#designating-the-settings
qui me dit que
Lorsque vous utilisez Django, vous devez lui indiquer les paramètres que vous utilisez . Pour ce faire, utilisez une variable d’environnement, Django_SETTINGS_MODULE. Le La valeur de Django_SETTINGS_MODULE doit être dans la syntaxe du chemin Python, par exemple . mysite.settings. Notez que le module de configuration devrait être sur le Python chemin de recherche d'importation.
Suite à une suggestion dans Définition de Django_SETTINGS_MODULE sous virtualenv? J'ai ajouté les lignes
export Django_SETTINGS_MODULE="blossom.settings"
echo $Django_SETTINGS_MODULE
à virtual_environment/bin/activate. Maintenant, lorsque j'exécute la commande activate afin d'activer l'environnement virtuel, la lecture de sortie s'affiche:
Django_SETTINGS_MODULE set to blossom.settings
Cela me semble bien, mais le problème que j’ai à faire est que courir
Django-admin.py dumpdata
renvoie l'erreur suivante:
ImportError: Could not import settings 'blossom.settings' (Is it on sys.path?): No module named blossom.settings
Qu'est-ce que je fais mal? Comment puis-je vérifier lesys.path
? Comment cela est-il censé fonctionner?
Merci.
N'exécutez pas Django-admin.py
pour autre chose que la création initiale du projet. Pour tout ce qui suit, utilisez manage.py
, qui prend en charge la recherche des paramètres.
Je viens de rencontrer la même erreur et j'ai finalement réussi à comprendre ce qui se passait (le gros indice était (Is it on sys.path?)
dans ImportError
).
Vous devez ajouter votre répertoire de projet à PYTHONPATH
- c’est ce que la documentation signifie par
Notez que le module de paramètres doit se trouver sur le chemin de recherche d'importation Python.
Pour ce faire, lancez
$ export PYTHONPATH=$PYTHONPATH:$PWD
à partir du répertoire ~/dev/Django-project
avant d'exécuter Django-admin.py
.
Vous pouvez ajouter cette commande (en remplaçant $PWD
par le chemin réel de votre projet, i.e.~/dev/Django-project
) au script source
de votre virtualenv. Si vous choisissez d'avancer vers virtualenvwrapper à un moment donné (ce qui est conçu pour ce type de situation), vous pouvez ajouter la ligne export PY...
au script de hook postactivate
généré automatiquement.
mkdjangovirtualenv automatise cela encore plus loin, en ajoutant l'entrée appropriée au chemin Python pour vous, mais je ne l'ai pas testée moi-même.
Sur une machine de type Unix, vous pouvez simplement alias virtualenv comme ceci et utiliser alias au lieu de taper à tout moment:
.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'
Je sais qu'il y a beaucoup de réponses, mais celle-ci a fonctionné pour moi uniquement pour l'enregistrement.
.virtual_env
où se trouvent tous les environnements virtuels.export Django_SETTINGS_MODULE=<Django_project>.settings
Ou export Django_SETTINGS_MODULE=<Django_project>.settings.local
si vous utilisez un fichier de paramètres séparé stocké dans un dossier de paramètres.Mon alternative préférée est de passer le fichier de paramètres en tant que paramètre d’exécution à manage.py
dans une syntaxe de paquet Python, par exemple:
python manage.py runserver --settings folder.filename
plus d'infos Django docs
Une autre solution consiste à utiliser le package python dotenv et à inclure PYTHONPATH et Django_SETTINGS_MODULE dans le fichier .env avec vos autres variables d’environnement. Modifiez ensuite vos fichiers manage.py et wsgi.py pour les charger comme indiqué dans les instructions.
from dotenv import load_dotenv
load_dotenv()