启动Telegram Bot时出现ModuleNotFoundError: No module named 'bin.strings'求助
解决ModuleNotFoundError: No module named 'bin.strings'问题
问题场景
启动Telegram机器人执行python3 main.py时触发如下错误:
Traceback (most recent call last): File "/home/tg_bot/main.py", line 6, in <module> import database File "/home/tg_bot/database.py", line 4, in <module> from bin.strings import get_now_date ModuleNotFoundError: No module named 'bin.strings'
该程序此前运行无异常,问题突然出现。bin/strings.py中的get_now_date函数示例:
def get_now_date(): """ Получение текущей даты :return: """ now_data = datetime.now() return now_data.strftime("%d/%m/%Y %H:%M:%S")
排查与解决步骤
确认目录结构与包标识
检查项目根目录/home/tg_bot下的结构,必须保证bin是合法的Python包:bin文件夹下必须存在__init__.py文件(可以是空文件,用于告诉Python这是一个可导入的包)- 正确目录结构:
/home/tg_bot/ ├── main.py ├── database.py └── bin/ ├── __init__.py └── strings.py
检查运行时工作目录
执行python3 main.py时,当前工作目录必须是项目根目录/home/tg_bot,否则Python无法找到bin包:- 直接切换到根目录运行:
cd /home/tg_bot && python3 main.py - 或者在
main.py开头添加代码,强制将项目根目录加入Python路径:import sys import os # 将项目根目录添加到Python搜索路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
- 直接切换到根目录运行:
排查文件权限与命名冲突
- 检查
bin目录及strings.py的权限,确保Python进程有读取权限:chmod -R 755 /home/tg_bot/bin - 确认项目中没有其他同名的
strings.py文件,避免和自定义包或标准库模块冲突。
- 检查
验证虚拟环境(若使用)
如果之前使用了虚拟环境,确认当前运行时已激活正确的环境:- 以venv为例,激活命令:
source /home/tg_bot/venv/bin/activate
环境切换可能导致Python路径变化,引发模块找不到的问题。
- 以venv为例,激活命令:
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

