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

Python3虚拟环境误用Python2.6的socket致PyMySQL报错,如何强制用虚拟环境版本?

问题根源分析

从你的错误日志里能明显看到/usr/lib64/python2.6/io.py的调用痕迹——这说明Apache的WSGI模块仍然在使用系统默认的Python2.6,根本没用到你创建的Python3虚拟环境,和你安装的python-socketio完全无关。

解决方案步骤

1. 确保Apache使用Python3版本的mod_wsgi

系统默认的mod_wsgi大概率是绑定Python2的,你需要安装对应Python3版本的模块:

  • 如果你用的是CentOS/RHEL系列,直接安装适配包:
    yum install python36-mod_wsgi  # 这里的版本号对应你安装的Python3.6,按需调整
    
  • 验证安装结果:运行httpd -M | grep wsgi,输出里应该能看到Python3相关的标识;或者用mod_wsgi-express module-config查看模块路径,确认指向Python3目录。

2. 修改Apache配置,强制绑定虚拟环境

找到你的Web应用对应的Apache配置文件(比如/etc/httpd/conf.d/webapp.conf或者VirtualHost块),添加以下配置:

# 指定虚拟环境的Python根目录
WSGIPythonHome /var/www/webapp/py3env
# 指定虚拟环境的site-packages路径,确保依赖能被找到
WSGIPythonPath /var/www/webapp/py3env/lib/python3.6/site-packages

同时,确保你的WSGI入口脚本(比如wsgi.py)里的依赖导入是基于虚拟环境的,不需要额外修改shebang(Apache的WSGI模块会忽略这个,主要靠上面的配置指定解释器)。

3. 确认虚拟环境的依赖安装正确

进入虚拟环境再检查一遍:

source /var/www/webapp/py3env/bin/activate
pip list

确认Flask和PyMySQL都出现在列表里,避免之前误把依赖装到了系统Python2里。

4. 重启Apache生效

最后重启服务让配置生效:

systemctl restart httpd
# 或者老版本用 service httpd restart

另外你提到的MySQL-python是Python2版本的MySQL驱动,和你虚拟环境里的PyMySQL不冲突,不用管它,确保应用代码里导入的是pymysql而非MySQLdb就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:42