python - 在 Linux 中未使用 load_dotenv() 加载环境变量
问题描述
我正在尝试制作一个不和谐的机器人,当我尝试使用 load_dotenv() 加载 .env 时它不起作用,因为它说
Traceback (most recent call last):
File "/home/fanjin/Documents/Python Projects/Discord Bot/bot.py", line 15, in <module>
client.run(TOKEN)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 708, in run
return future.result()
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 687, in runner
await self.start(*args, **kwargs)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 650, in start
await self.login(*args, bot=bot)
File "/home/fanjin/.local/lib/python3.8/site-packages/discord/client.py", line 499, in login
await self.http.static_login(token.strip(), bot=bot)
AttributeError: 'NoneType' object has no attribute 'strip
这是我的机器人代码:
import os
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
client = discord.Client()
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
client.run(TOKEN)
还有 save.env 文件:(这是一个假令牌)
# .env
DISCORD_TOKEN={Bzc0NjfUH8fEWFjg2NDMyMjY2.X6coqw.JyiOR89JIH7fFFoyOMufK_1A}
这两个文件都在同一个目录中,我什至尝试使用显式指定 .env 的路径
env_path = Path('path/to/file') / '.env'
load_dotenv(dotenv_path=env_path)
但这也没有用
解决方案
我遇到了类似的问题,并发现了这三个可能的解决方案/原因:
检查 .env 文件中的语法是否正确,原始文档将是最佳来源 - Python Dotenv(示例如下)
DOMAIN=example.org ADMIN_EMAIL=admin@${DOMAIN} ROOT_URL=${DOMAIN}/app
对我有用的解决方案是使用
find_dotenv()
而不是里面的文件路径load_dotenv()
,原因是load_dotenv()
没有正确加载 .env 文件。find_dotenv()
如果 .env 文件与您的代码文件位于同一文件夹中,该函数会自动查找该文件。from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv())
您可以将搜索限制在当前项目文件夹中
sys.path[1]
,以确保您正在阅读预期的文件。import sys from dotenv import load_dotenv load_dotenv(sys.path[1]) #try .path[0] if 1 doesn't work
因为,我将.env
文件移动到另一个子文件夹config
中,所以我必须提供完整路径才能load_dotenv()
使其工作。
import sys
from dotenv import load_dotenv
path = sys.path[1]+'/config/.env' #try .path[0] if 1 doesn't work
load_dotenv(path)
[编辑]
推荐阅读
- terraform - 将所有 DigitalOcean Droplet 实例添加到 Terraform 中的项目
- r - 尽管超过 2 个级别,R 中的 rstatix anova_test 仍会给出对比度错误
- java - 从 Android 应用程序向 Laravel 发出 POST 请求时出现 419 错误代码
- ios - ios UIScrollView 自动滚动到时间线结束
- java - Spring MVC JSP 表单未使用会话中的值进行更新
- angular - 重写嵌套订阅
- python - 我需要处理带有推文的文本。使用正则表达式甚至普通的python代码
- airflow - Can you specify the number of threads for certain tasks in a DAG?
- google-apps-script - How to hide/unhide a named range of columns with Google script
- python - How does the FrameAnimation3d class work in Ursina (a message to pokepetter)