Linux 中的环境变量未使用 load_dotenv() 加载

2023-11-24

我正在尝试制作一个不和谐的机器人,当我尝试使用 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)

但这也不起作用


我遇到了类似的问题,并找到了以下三种可能的解决方案/原因:
  1. 检查 .env 文件中的语法是否正确,原始文档将是最好的来源 -Python Dotenv(下面的示例)

     DOMAIN=example.org
     ADMIN_EMAIL=admin@${DOMAIN}
     ROOT_URL=${DOMAIN}/app
    
  2. 对我有用的解决方案是使用find_dotenv()而不是里面的文件路径load_dotenv(), 原因是load_dotenv()无法正确加载 .env 文件。find_dotenv()是一个自动查找 .env 文件(如果它与代码文件位于同一文件夹中)的函数。

     from dotenv import load_dotenv, find_dotenv
    
     load_dotenv(find_dotenv())
    
  3. 您可以使用以下命令将搜索限制为当前项目文件夹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)

[edited]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中的环境变量未使用 load_dotenv() 加载 的相关文章

随机推荐

  • 将 location.pathname 和 location.search 设置在一起?

    我想做类似的事情 location pathname abc location search name test 它最终被重定向到 abc 我希望重定向发生 abc name test 只需设置location or location hr
  • 如何将图像大小缩小到1MB

    我希望我的应用程序上传图像没有大小限制 但在代码中 如果图像大小超过 我想将图像大小调整为 1MB 我尝试了很多方法 但找不到满足上面提到的要求的任何代码 这一次 我尝试过这个 public void scaleDown int width
  • jQuery 在选定的收音机上添加/删除 css 类

    我已经在这里阅读了一些解决方案 但我的问题非常不同 这些解决方案不起作用 基本上 如果单选按钮被选中 则向父 div 添加一个 css 类 如果未选中无线电 请删除 css 类 听起来很简单 我有多个单选按钮组 因此换句话说 一次会选择多个
  • PIC16 C 编译器

    我正在为 PIC 16 系列寻找一个在 Windows 上运行的优秀 C 编译器 几个同事使用bknudc但有些人似乎不喜欢它 显然你无法有效地使用链接器 事实证明最好的方法是将所有代码设置在包含文件中 SDCC看起来不错 但看起来它仍处于
  • dart,单元测试私有方法

    我有一个相当大的库 但只公开了一个非常小的 API 以方便新用户使用和学习 我想以这种方式保留我的库 但我也想确保我有尽可能多的单元测试覆盖率 我希望能够直接对我的所有课程进行单元测试 但据我所知我可以仅对库的公共 API 进行单元测试 当
  • 使用 Qunit 断言函数抛出异常

    我是 Qunit 和单元测试的新手 我试图弄清楚测试以下功能的内容和方法 目前它没有做太多事情 但我想断言 如果我传递错误的值 则会抛出错误 function attrToggle panel attr use strict if pane
  • 字符串的 OCaml 函数参数模式匹配

    我尝试传递一个字符串来获取反转的字符串 为什么我不能这样做 let rec reverse x match x with gt e s gt reverse s e 编译器说这是一个语法错误 我不能用吗 解构参数 原因是字符串不像列表那样表
  • Visual C++ 中的 Pthread

    我正在 Windows 中尝试多线程 想知道是否应该 use Win32 API use Windows 的 POSIX 线程 如果我尝试在不同平台上开发此类应用程序 学习 Pthreads 将很有用 但如果不学习 Win32 API 我会
  • 在 Android 嵌套 PreferenceScreen 上显示向上/后退按钮?

    我有一个两级 PreferenceScreen
  • 带有等号和空格的 Python 子进程参数

    我正在尝试运行命令subprocess check output不使用shell True关键字参数 我的命令是这样的 command parameter something with spaces 有了这个 subprocess chec
  • 按钮的 jQuery Datatable DOM 定位

    我刚刚将 jQuery Datatable 版本升级到 1 10 然后我尝试删除其已退役的插件 例如带有 Button 扩展名的 Colvis 和 Tabletools 这里一切正常 但对我来说问题是 我无法将 Colvis 按钮与 Tab
  • 我的自定义异常应该继承与它们类似的异常还是仅从 Exception 继承?

    我正在我的应用程序中创建一些自定义异常 如果我在测试参数状态后抛出异常 或者在测试 int 在正确范围内后抛出异常 那么我的异常应该继承 ArgumentException 和 IndexOutOfRangeException 还是应该继承
  • 运行 GAE devserver 时,jsessionID 会附加到 url

    由于某种原因 字符串如下 jsessionid SESSION HERE当我访问部署到 GAE 开发服务器的应用程序时 它会被添加到网址中 这会让事情变得混乱 因为对于某些 url 来说 它根本无法解析为 GET 参数 有时它最终会出现这样
  • 可变长度 rnn 填充和屏蔽填充梯度

    我正在构建一个 rnn 并使用 sequene length 参数来提供批次中序列的长度列表 并且批次中的所有序列都填充到相同的长度 然而 在进行反向传播时 是否可以屏蔽掉与填充步骤相对应的梯度 从而使这些步骤对权重更新的贡献为 0 我已经
  • 如何用另一个 JPanel 替换 JPanel

    我想用 JFrame 中的另一个 Jpanel 替换 Jpanel 我已经搜索并尝试了我的代码 但什么也没发生 这是我的代码 public class Frame extends JFrame private Container conta
  • HttpClient 和 PushStreamContent

    我将 PushStreamContent 与 REST API ASP NET Web API 结合使用 效果非常好 HttpClient 可以在服务器处理完整请求之前请求资源并获取 HTTP Response 服务器仍然写入推送流 作为
  • 在 Ruby 中查找多个正则表达式匹配的模式和位置

    这应该是一个简单的问题 但我找不到任何相关内容 给定 Ruby 中的正则表达式 对于每个匹配 我需要检索匹配的模式 1 2 但我还需要匹配的位置 我知道 运算符给我第一个匹配的位置 而string scan regex 给我所有匹配的模式
  • 当 scanf!=EOF 或 scanf==1 时?

    其他条件不变的情况下 格式良好的数据 良好的缓冲实践等等 是否有理由我更喜欢在返回时循环scanf是 1 而不是 EOF 我可能在某处读过这篇文章 或者其他什么 但我也可能有错 其他人怎么看 scanf返回成功转换的项目数 或错误时返回 E
  • 在 Android 中从一个活动移动到下一个活动

    我正在 Android 中开发一个具有登录屏幕的应用程序 现在我可以成功接收服务器的响应 成功响应后 它应该带我进入下一个活动或课程 在其中显示新的屏幕 活动 为了实现这个目标我应该做什么 在 Android 中 您可以使用 Intents
  • Linux 中的环境变量未使用 load_dotenv() 加载

    我正在尝试制作一个不和谐的机器人 当我尝试使用 load dotenv 加载 env 时 它不起作用 因为它说 Traceback most recent call last File home fanjin Documents Pytho