Django运行报错ValueError: source code string cannot contain null bytes问题咨询
错误触发原因
核心是Python解析代码时检测到文件中混入了\x00空字节字符,导致无法正常解析导入的模块。结合你描述的场景,常见触发原因有3类:
- 项目文件传输损坏:你将项目拷贝/传输给朋友的过程中,传输工具、存储介质异常,或者Git提交/拉取时出现编码错误,导致项目内的.py文件或者依赖包文件混入了隐藏空字符
- 朋友本地Python环境损坏:他设备上的Python安装目录下的标准库文件受损,本次报错指向的
wsgiref.simple_server是Python内置标准库,若安装时解压出错、杀毒软件误改了库文件内容,就会出现该问题 - 编码兼容问题:你本地创建项目时部分.py文件使用了带BOM的UTF-8编码,或者编辑过程中混入了不可见控制字符,你本地编辑器兼容可正常读取,朋友的环境无法兼容解析
解决方案
按优先级依次排查即可:
- 先排查Python环境是否损坏
让你朋友在本地新建一个空白Django项目,执行启动命令测试:
- 如果新建项目也报同样错误,直接修复他的Python环境:控制面板找到对应版本Python,选择「更改」-「修复」,或者卸载后重新安装对应版本Python即可
- 如果新建项目可以正常启动,说明是你传输的项目文件存在问题,走下一步排查
重新传输项目文件
不要零散拷贝单个文件,将你本地正常运行的项目完整打包为ZIP压缩包后再发送给朋友,让他解压后重新启动,避免零散传输导致的文件损坏。如果是用Git同步项目,让他删除本地仓库后重新执行git clone拉取最新代码即可。扫描修复项目内带空字符的文件
如果上述操作都无效,可以运行以下脚本扫描项目内所有.py文件,定位并清除空字符:
import os # 替换为你朋友本地的项目根目录路径 project_root = "C:\\xxx\\你的项目根目录" for root, dirs, files in os.walk(project_root): for file in files: if not file.endswith(".py"): continue file_path = os.path.join(root, file) with open(file_path, "rb") as f: content = f.read() if b"\x00" in content: print(f"找到损坏文件:{file_path}") # 确认要修复的话取消下面代码的注释,操作前建议先备份项目 # new_content = content.replace(b"\x00", b"") # with open(file_path, "wb") as f: # f.write(new_content)
内容的提问来源于stack exchange,提问作者Simon Cankov
相关产品推荐
相关产品推荐

