pip安装的uWSGI出现./python_plugin.so错误

33

我使用pip安装了uWSGI,并使用XML启动它来加载我的应用程序。XML配置包含 <plugin>python</plugin>。在我的新服务器上,这导致出现错误:

open("./python_plugin.so"): No such file or directory [core/utils.c line 3321]
!!! UNABLE to load uWSGI plugin: ./python_plugin.so: cannot open shared object file: No such file or directory !!!

我可以找到 .c.o 版本:

sudo find / -name 'python_plugin.c'
/srv/www/li/venv/build/uwsgi/build/uwsgi/plugins/python/python_plugin.c
/srv/www/li/venv/build/uwsgi/plugins/python/python_plugin.c
sudo find / -name 'python_plugin.o'
/srv/www/li/venv/build/uwsgi/build/uwsgi/plugins/python/python_plugin.o
/srv/www/li/venv/build/uwsgi/plugins/python/python_plugin.o
sudo find / -name 'python_plugin.so'

但是没有找到.so文件。我的先前系统通过apt-get安装了uwsgi,但那个版本实在是太旧了(我非常确定它通常使用pip安装的uwsgi,但也许不是用于共享对象?)

一些背景信息:

  • Ubuntu 12.04 LTS
  • Python 2.7(virtualenv)
  • 我在虚拟环境中使用普通的pip install uwsgi(没有sudo)安装了uWSGI

所以我有点茫然:( 我不可能是世界上唯一遇到这个问题的人吧?我应该自己编译.so对象吗?(如果是这样,该怎么做呢?)或者还有其他好的解决办法吗?


所以...我从xml文件中删除了<plugin>python</plugin>,现在它可以加载了...但我不明白为什么/何时需要它。还需要检查是否真的现在可以工作。 - Carst
5个回答

54

对于任何遇到困难的人,基本上您需要从配置文件中删除声明插件的行,如果您从发行版软件包更改为使用pypi或gem安装。我之前使用的是Ubuntu/Debian软件包来安装uwsgi,但它已经过时了,所以我升级为使用pip。

因此,在我的配置.ini文件中,我有以下行:

plugin = python

移除那一行可以解决这个问题。


5
使用 XML 而非 .ini 文件的用户需要注意,要删除 "<plugin>python</plugin>"。请注意不改变原意,保持通俗易懂,不提供解释或其他信息。 - Carst

54

发行版应该以模块化的方式将uWSGI打包,将每个功能作为插件。但是当您使用特定于语言的方式(pip,gem等)进行安装时,相关语言会被嵌入,因此您无需加载插件。


这是有关uwsgi安装的最相关评论。谢谢。这里有一个对未来读者有用的链接:http://projects.unbit.it/uwsgi/wiki/MultiPython - airstrike

11

或许您忘记了这个命令

$ apt-get install uwsgi-plugin-python

如果您正在使用Python3,请尝试使用此命令代替:

$ apt-get install uwsgi-plugin-python3

在CentOS和RHEL下安装uWSGI Python插件的命令:sudo yum install uwsgi-plugin-python - radtek
1
如果您已经使用pip安装了uwsgi和/或正在运行virtualenv,请不要这样做。这两个版本不兼容。请使用@Jordan的答案。 - Paul Kenjora
已确认于2019年10月,virtualenv安装在Python 3.7上,插件安装在Python 3.6上。导致出现“没有名为'encodings'的模块”的错误。 - Paul Kenjora

0

0

安装所有可用的插件:sudo apt-get install uwsgi-plugins-all


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接