IIS部署Django项目无法识别新增py文件导入模块报错
IIS部署Django无法识别新增py文件的解决方案
这个问题和文件权限无关,核心原因是IIS通过FastCGI托管Python进程时,默认会长期驻留后台进程不退出,进程启动时完成模块扫描加载后,后续新增的项目文件不会被自动识别,同时Python字节码缓存未同步更新,就会触发No module named 'app.test'报错,本地开发用runserver自带热重载所以不会出现这个问题。
按以下顺序操作即可解决
- 回收对应站点的应用程序池
打开IIS管理器,找到当前Django站点绑定的应用程序池,右键选择「回收」即可杀掉所有旧的驻留Python进程,注意不要只重启站点,单纯重启站点不会杀掉已运行的FastCGI进程。 - 全量清理Python缓存
删除项目目录下所有__pycache__文件夹,以及所有后缀为.pyc的字节码缓存文件,避免旧缓存干扰新模块加载。 - 核对服务器文件状态
首先确认服务器上app目录下确实存在test.py文件,关闭Windows资源管理器的「隐藏已知文件类型的扩展名」选项,避免文件实际为test.py.txt这类命名错误;其次右键test.py打开属性-安全面板,确认IIS_IUSRS、IUSR两个账号拥有读取、读取&执行权限,和同目录下oldFile.py的权限配置完全一致,排除新建文件未正确继承父目录权限的情况。 - 调整FastCGI进程回收配置(可选,避免后续新增文件再出问题)
在IIS管理器中找到对应站点的FastCGI设置,选中你使用的Python解释器条目,编辑设置将「实例最大请求数」从默认的2000000调整为50-200区间,让FastCGI进程定期自动回收,避免进程长期驻留无法加载新文件,修改后再次回收应用程序池生效。
验证方法
在服务器上打开命令提示符,进入项目根目录执行以下命令,确认模块本身可以被Python正常加载:
python -c "import sys; sys.path.insert(0, r'你的djangoRest项目的绝对路径'); import app.test; print('模块加载正常')"
如果命令执行成功但IIS访问仍报错,检查Django的settings.py中DEBUG是否为False,有没有配置错误的模块导入白名单即可。
内容的提问来源于stack exchange,提问作者Joris
相关产品推荐
相关产品推荐

