我已经安装了 python-dotenv 但 python 找不到它

Mar*_*ink 4 python flask dotenv

我在一个烧瓶项目中使用 dotenv,并且也在一个简化的测试环境中进行了测试。我试过卸载和重新安装等,但 python 找不到 dotenv 模块。

启动烧瓶时,它看到有一些 .env 文件,并告诉我安装 dotenv 即使它已安装,我也可以在烧瓶系统库中看到它。

这就是在命令行中发生的事情。

当我运行代码时,我收到一个模块未找到错误,说它找不到 dotenv。代码是

import os
from dotenv import load_dotenv
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

错误是

错误信息

任何建议都感激地接受。

小智 11

您可能还安装了“dotenv”软件包。

在您的虚拟环境中,尝试:

pip uninstall dotenv
pip uninstall python-dotenv
pip install python-dotenv
Run Code Online (Sandbox Code Playgroud)

此外,您可能在系统级别(在虚拟环境之外)安装了 dotenv。如果是,您可以尝试卸载它。

如果这不是问题,请发布您的代码和由此产生的错误。

  • 您还可以尝试运行“python -m pip install python-dotenv”(或“python3 -m pip ...”)。我发现有时“pip”和“python”命令在不同的环境中运行。 (2认同)

Mar*_*ink 6

事实证明,我的代码存在许多问题,我将在此处简要列出,以防其他人遇到相同的问题。

第一个问题

作为一个相当新的人,我不太清楚我安装的 python 生态系统是如何结合在一起的。我已经安装了 Anaconda 和 Spyder 作为我的开发环境。但是,我一直在关注 Flask 教程,该教程使用 pip 作为虚拟环境的安装程序。我使用的命令提示符是 Anaconda 附带的命令提示符。一切似乎都运行正常,直到我遇到了 dotenv 问题,这实际上是整个相当大的教程中的一个小细节。

为了修复 dotenv,我尝试使用 pip 进行各种安装/卸载,我可以看到 dotenv已经安装了!那没有用。在我的命令提示符中使用 conda 安装 dotenv 起作用的是什么,但我必须明确说明从哪里获取 dotenv。有效的命令是

conda install -c conda-forge python-dotenv

第二个问题

一旦我安装了 dotenv,我就无法从.env文件中设置环境变量。本教程用于os.path.dirname(__file__)获取当前工作目录。结果__file__总是小写,但我的目录中有一些大写。结果.env找不到文件的绝对路径!我通过使用尊重大小写的内置 pathlib 模块解决了这个问题。这是一些代码。

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')
Run Code Online (Sandbox Code Playgroud)