web-dev-qa-db-fra.com

J'ai installé python-dotenv mais python ne le trouve pas

j'utilise dotenv dans un projet flask, et j'ai également testé cela dans un environnement de test simplifié. J'ai essayé de désinstaller et de réinstaller etc. mais le module dotenv ne peut pas être trouvé par python.

Au démarrage de flask il voit qu'il y a des fichiers .env et me dit d'installer dotenv même s'il est installé et je peux le voir dans les bibliothèques système des flacons.

This is what happens at the command line.

Lorsque j'exécute du code, j'obtiens une erreur de module introuvable indiquant qu'il ne peut pas trouver dotenv. Le code est

import os
from dotenv import load_dotenv
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

et l'erreur est

The error message

Tout conseil accepté avec reconnaissance.

3
Mark Kortink

Il s'avère qu'il y avait un certain nombre de problèmes avec mon code et je vais les énumérer brièvement ici au cas où quelqu'un d'autre rencontrerait les mêmes problèmes.

1er problème

Étant relativement nouveau, je ne sais pas vraiment comment l'écosystème python que j'ai installé se bloque tous ensemble. J'ai installé Anaconda et Spyder comme environnement de développement. Cependant, j'ai suivi un Flask tutoriel qui utilise pip comme programme d'installation avec des environnements virtuels. La commande Invite que j'utilise est celle fournie avec Anaconda. Tout semblait fonctionner correctement d'une manière ou d'une autre, jusqu'à ce que j'obtienne le problème dotenv, qui est en fait un tout petit détail dans le didacticiel global plutôt volumineux.

Pour corriger dotenv, j'essayais toutes sortes d'installation/désinstallation avec pip, je pouvais voir dotenv était déjà installé! Ça n'a pas marché. Ce qui a fonctionné, c'était l'installation de dotenv avec conda dans mon invite de commande, mais je devais être explicite sur où obtenir dotenv. La commande qui a fonctionné était

conda install -c conda-forge python-dotenv

2ème problème

Une fois l'installation de dotenv terminée, je n'ai pas pu définir les variables d'environnement à partir du fichier .env. Le didacticiel utilise os.path.dirname(__file__) pour obtenir le répertoire de travail actuel. Il s'avère que __file__ Est toujours en minuscules, mais mon répertoire contient des majuscules. Par conséquent, le chemin absolu du fichier .env Est introuvable! J'ai corrigé cela en utilisant le module pathlib intégré qui respecte la casse. Voici du code.

import os
from pathlib import Path
from dotenv import load_dotenv

# Get the base directory
basepath = Path()
basedir = str(basepath.cwd())
# Load the environment variables
envars = basepath.cwd() / '.env'
load_dotenv(envars)
# Read an environment variable.
SECRET_KEY = os.getenv('SECRET_KEY')
1
Mark Kortink