You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Heroku部署Discord Bot时,如何从.env文件正确获取令牌并解决导入错误

解决Heroku上Discord Bot无法读取TOKEN环境变量的问题

你遇到的问题主要源于两个关键点:模块名冲突,以及.env文件的错误加载方式,我来一步步帮你解决:

1. 解决模块导入冲突

你写的from token import TOKEN会被Python误认为是导入标准库自带的token模块(这个模块用于处理Python代码的词法分析,和你的自定义.env文件完全无关),这就是触发ImportError的核心原因。

2. 正确加载.env文件的环境变量

.env格式的配置文件需要专门的库来解析,推荐使用python-dotenv工具:

步骤1:添加依赖到requirements.txt

确保你的requirements.txt包含以下内容(Heroku会自动安装这些依赖):

discord.py
python-dotenv

步骤2:修改main.py的代码逻辑

替换原来的导入方式,改用dotenv加载环境变量:

import discord
import os
from dotenv import load_dotenv

# 加载token.env文件中的配置变量
load_dotenv('token.env')
token = os.getenv('TOKEN')

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    msg = message.content
    if msg.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(token)

步骤3:修正token.env的格式

.env文件中不要添加多余空格,正确格式应为:

TOKEN=your_bot_token_here

3. 更安全的Heroku环境变量配置(推荐)

在Heroku平台上,直接使用内置的Config Vars存储敏感信息(比如Bot令牌)比上传.env文件更安全、更便捷:

  • 打开Heroku控制台,进入你的应用页面
  • 切换到Settings标签,找到Config Vars区域
  • 点击Reveal Config Vars,添加一个键为TOKEN、值为你的Bot令牌的变量

这种方式下,你的main.py可以进一步简化(无需.env文件和python-dotenv依赖):

import discord
import os

token = os.getenv('TOKEN')

client = discord.Client()

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    msg = message.content
    if msg.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(token)

4. 确认Procfile和服务状态

你的Procfile配置是正确的:

worker: python main.py

你已经在Heroku控制台启动了worker服务,这部分无需调整。

最后重新部署代码到Heroku,你的Bot就能正常读取TOKEN并启动了!

内容的提问来源于stack exchange,提问作者Joshua Edwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:47:32