启动 uWSGI 时日志中显示 ImportError: No module named xxx 的解决方法

前几天在部署 Vue + Django + Uwsgi + Nginx 的生产环境时,发现前端部署成功了,但是一直无法获取后端的数据,检查 Uwsgi 日志(位于 uwsgi安装目录/projects/log 下)发现日志中提示 “ImportError: No module named xxx” ,试过网上的各种方法还是无法解决,最终摸索出一套解决方法如下:

 

1、首先使用 pip install xxx 安装缺失的 module 并重新运行 Uwsgi,如果日志中依然提示原来的错误,则转步骤 2 ;

pip install xxx(日志中提示缺失的模组名)

 

2、检查日志中启动 Uwsgi 时使用的 python 版本:

 这里可知博主启动启动 Uwsgi 时使用的 python 版本是 3.6 ;

 

3、使用 pip3.6 list 命令查看当前版本下 python 库中所有的 module,若确实缺失 Uwsgi 中提示的 module,则使用 pip3.6 install xxx 即可(这两处 pip 后面的版本替换成自己日志中的 python 版本);

 

4、重新运行 Uwsgi,若 pip3.6 install 成功,Uwsgi 可正常运行,若提示别的模组缺失,则继续使用 pip3.6 install xxx 安装。

 

****** 其他问题 ******

 

Q:我不想使用日志中提示的 python 版本运行 Uwsgi,如何修改版本?

A:根据官方文档,可使用一个小的二进制文件,其中内建语言无关的特性,然后为每个Python版本准备一个插件,按需加载。

 

1、在uWSGI源代码目录中输入:

make PROFILE=nolang

 

2、在相同的目录下,构建 Python 插件:

PYTHON=python3.6 ./uwsgi --build-plugin "plugins/python python36"
PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"
PYTHON=python2.6 ./uwsgi --build-plugin "plugins/python python26"

拷贝上面的这些到想要的目录下 (默认情况下,uWSGI会在当前工作目录下搜索插件。)

 

3、在 Uwsgi 配置文件中添加:

plugins-dir = <path_to_your_plugin_directory>
plugin = python36

其中 plugins-dir 是步骤2中所下载插件的路径,plugin 用于指定你想要使用的 python 版本。

 

4、使用 pkill -f uwsgi -9 关闭 Uwsgi 进程,再重启即可。

 

参考文档:

https://uwsgi-docs.readthedocs.io/en/latest/Install.html

https://uwsgi-docs-zh.readthedocs.io/zh-cn/latest/WSGIquickstart.html#pythonuwsgi

posted @ 2024-03-27 17:44  shinonomeasahi  阅读(164)  评论(0编辑  收藏  举报

博主技术水平有限,如有遗漏或错误之处,欢迎指正