部署Django应用至Heroku遇PythonPath问题:找不到UsefulFunctions模块
刚第一次部署Django到Heroku就碰到这个问题?别慌,这个ModuleNotFoundError在新手部署里太常见了,咱们一步步排查解决:
1. 先确认你的模块是合法的Python包
Python要识别一个目录为可导入的模块,必须要有__init__.py文件——哪怕是空的也行!你去看看UsefulFunctions目录里有没有这个文件?如果没有,赶紧创建一个,然后重新commit推送。
另外还要注意大小写问题:Heroku跑的是Linux系统,文件名大小写是严格区分的。如果你本地是Windows(大小写不敏感),可能本地代码里写import UsefulFunctions,但实际目录名是usefulfunctions,到了Heroku就会找不到。核对一下目录名和代码里的导入名完全一致。
2. 检查Django配置里的模块引用
如果UsefulFunctions是一个Django应用,那你得确保它已经加到settings.py的INSTALLED_APPS里了:
INSTALLED_APPS = [ # 其他默认应用比如django.contrib.admin之类的 'UsefulFunctions', # 这里要和你的模块名完全匹配 ]
如果它只是个普通的工具模块(不是Django app),那得让Python能找到它的位置。可以在settings.py开头加一段代码,把项目根目录加入Python的搜索路径:
import os import sys # 把项目根目录添加到sys.path,确保自定义模块能被找到 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
3. 排查Git是否把模块推送到Heroku了
有时候不小心把UsefulFunctions加到.gitignore里了,导致这个目录根本没被传到Heroku上。打开你的.gitignore文件,看看有没有类似UsefulFunctions/的规则,有的话删掉。
然后运行git status看看这个目录是不是处于未追踪状态,如果是的话,执行:
git add UsefulFunctions/ git commit -m "Add UsefulFunctions module" git push heroku master
4. 去Heroku上直接看文件结构
如果上面几步都没解决,咱们直接去Heroku的服务器上看看实际情况。用Heroku CLI登录后,运行:
heroku run bash
进入shell后,用ls命令查看目录,确认UsefulFunctions目录是不是存在,里面有没有__init__.py。如果不存在,说明就是Git推送的问题,回到第三步仔细检查。
最后补充
如果还是搞不定,把你的项目目录结构贴出来(比如根目录下有哪些文件夹,UsefulFunctions的位置),这样能更快定位问题。
内容的提问来源于stack exchange,提问作者ravioli




