当我在pyenv 2.7.11下启动uwsgi 2.0.11.2时,我得到:
ImportError:/home/user/.pyenv/versions/2.7.11/envs/master2/lib/python2.7/lib-dynload/_io.so:undefined symbol:_PyCodecInfo_GetIncrementalEncoder
也是uwsgi打印 Python版本:2.7.10(默认,2015年5月30日,13:57:08)[GCC 4.8.2]
不确定如何解决它
答案 0 :(得分:2)
将 Python 从 2.7.3 升级到 2.7时, uwsgi 的问题相同(或更好:类似) 0.10 :
_PyInt_AsInt
问题是 Python 次要次要版本之间的某些功能不匹配(它不会破坏任何向后兼容性, BTW )。让我详细说明一下:
构建时间:构建 uwsgi 时,构建针对 Python 2.7.10 (如您所指定)。 Python 可以编译/构建:
运行时:以上 uwsgi 必须在 Python 2.7.11 环境中运行
无论如何编译 Python ,都会发生以下情况:在 2.7.10 和 2.7.11 之间添加了一些内部函数/从两者中删除(在我们的例子中添加):
所以,基本上它是版本不匹配(在运行时遇到):
2.7.10 (编译 uwsgi ):
PyCodecInfo_GetIncrementalEncoder
2.7.11 (运行 uwsgi ):
PyCodecInfo_GetIncrementalEncoder
导致 Python 2.7.11 动态模块用于 Python 2.7.10 运行时的情况,这是不受支持的。
作为结论,请确保您的 uwsgi 构建机器与 runmachine Python PoV ) >,或 - 换句话说 - 构建 uwsgi 与您打算运行它的 Python 版本相同!
答案 1 :(得分:2)
CristiFati涵盖了原因部分。确切的对我来说是:
cd my_pyenv_virtualenv
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar xf uwsgi-latest.tar.gz
cd uwsgi-2.0.11.2
python uwsgiconfig.py --build
mv uwsgi /home/user/.pyenv/versions/2.7.11/envs/master2/bin/uwsgi
答案 2 :(得分:0)
我在RHEL上遇到了同样的错误,并最终发现它是由于我正在使用的tsch shell。我通过切换到bash shell解决了这个问题:
bash
允许我的脚本正常运行。