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

使用Mod_wsgi+Apache+Bottle.py时无法导入模块“server”求助

解决Bottle.py + mod_wsgi的ImportError: No module named server问题

我之前在部署Bottle应用到mod_wsgi时也碰到过几乎一模一样的问题,大概率是模块路径或命名冲突导致的,咱们一步步来排查:

1. 先排查模块命名冲突

如果你的自定义模块文件名叫server.py,那很可能和Bottle内部的server模块(或者系统自带的同名模块)重名了!mod_wsgi在导入时会优先找到系统/第三方库的同名模块,而不是你的自定义文件。

解决办法:把你的server.py改个独特的名字,比如my_api_server.py,然后把app.wsgi里的导入语句改成import my_api_server,重启Apache再测试。

2. 确认WSGIPythonPath配置是否生效

你提到已经配置了WSGIPythonPath,但大概率是路径没写对或者没重启服务。要确保把包含你的server模块的目录的绝对路径加进去:

比如你的server.py放在/var/www/myapi目录下,Apache配置里应该这么写:

# 全局配置方式
WSGIPythonPath /var/www/myapi

# 或者用守护进程指定(更推荐,隔离不同应用)
WSGIDaemonProcess myapi python-path=/var/www/myapi
WSGIProcessGroup myapi

改完配置一定要重启Apache(比如sudo systemctl restart apache2),不然配置不会生效。

3. 检查mod_wsgi绑定的Python版本

很多时候系统里会装多个Python版本,mod_wsgi可能绑定的不是你开发时用的那个版本,导致你的模块不在它的查找路径里。

可以在你的app.wsgi里加几行调试代码:

import sys
# 把当前Python的路径和版本打印到Apache错误日志
print(f"Python version: {sys.version}")
print(f"Python path: {sys.path}")

然后查看Apache的错误日志(一般在/var/log/apache2/error.log),看看输出的路径里有没有你的模块所在目录,以及Python版本是不是你预期的。如果版本不对,需要重新编译mod_wsgi来匹配你的目标Python版本。

4. 检查文件权限

Apache的运行用户(通常是www-data)需要有读取你的server.py文件的权限,以及访问该文件所在目录的权限。可以用以下命令检查:

ls -l /var/www/myapi/server.py

如果权限不对,临时调整试试:

chmod o+r /var/www/myapi/server.py
chmod o+x /var/www/myapi

5. 尝试绝对导入

如果你的应用是一个包结构,试试用相对或绝对导入的方式。比如app.wsgi和server.py在同一目录下,可以改成:

from . import server

如果上级目录是一个Python包(有__init__.py),可以用:

from myapi import server

内容的提问来源于stack exchange,提问作者Jeanette Pranin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:41:41