【问题标题】:uwsgi upgrade to python3.7 to fix ImportError: No module named 'encodings'uwsgi 升级到 python3.7 以修复 ImportError: No module named 'encodings'
【发布时间】:2020-04-23 13:23:30
【问题描述】:

老实说,我不知道自己在做什么,所以请对我温柔一点。我正在尝试使用 uwsgi 在 aws ubuntu 实例上运行我的 django 应用程序。我有一个运行 python3.7 的虚拟环境,但是当我尝试运行 uwsgi 时。我在日志中得到了这个:

*** Starting uWSGI 2.0.14 (64bit) on [Sun Jan  5 14:51:32 2020] ***
compiled with version: 5.4.0 20160609 on 20 October 2016 05:56:34
os: Linux-4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018
nodename: ip-172-31-41-139
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
chdir() to /home/ubuntu/web/graff
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 3804
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /home/ubuntu/web/graffuwsgi.sock fd 3
Python version: 3.5.2 (default, Oct  8 2019, 13:06:37)  [GCC 5.4.0 20160609]
Set PythonHome to /home/ubuntu/.virtualenvs/graff
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

这是我的 uwsgi.conf

# file: /etc/init/graffuwsgi.conf
description "uWSGI server for graff"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
exec /usr/local/bin/uwsgi --home /home/ubuntu/web/graff/ --socket /home/ubuntu/web/graffuwsgi.sock --chmod-socket=666 --module=graff.wsgi --pythonpath /home/ubuntu/web -H /home/ubuntu/.virtualenvs/graff --logto /home/ubuntu/web/logs/graffuwsgi.log --chdir=/home/ubuntu/web/graff --chmod-socket=666

似乎 python3.5 不再工作了。我觉得我最近不得不在几个地方用 3.7 替换 python3.5 以修复各种错误,并且我认为如果我可以让 uwsgi 运行 python3.7 而不是 3.5 那么这将解决这个错误也。无论如何,非常感谢任何帮助。

【问题讨论】:

    标签: uwsgi django-wsgi


    【解决方案1】:

    看起来你的uwsgi是用不同的python版本编译的,请确保你用python 3.5编译

    PYTHON=python3.5 uwsgi --build-plugin "/usr/src/uwsgi/plugins/python python35"
    mv python35_plugin.so /usr/lib/uwsgi/plugins/python35_plugin.so
    chmod 644 /usr/lib/uwsgi/plugins/python35_plugin.so
    

    您可以按照本指南进行操作:

    https://www.paulox.net/2017/04/04/how-to-use-uwsgi-with-python3-6-in-ubuntu/

    【讨论】:

    • Error: unable to find directory '/usr/src/uwsgi/plugins/python' 关于路径应该是什么其他猜测?奇怪的是,我在这台服务器上的六个其他 django 应用程序上使用了 uwsgi,没有任何问题。唯一不同的是,这个是python3.7环境和django的更新版本。
    【解决方案2】:

    错误来源是PythonHome(pyhome, venv, home)设置。

    请参阅official Python docs on Environment variables

    您的路径 /home/ubuntu/.virtualenvs/graff 是否适合 Python 要求?

    简而言之: 使用pythonpath (pp) 并让系统查找模块。

    您可以在 uwsgi 配置中设置多个重复选项来自定义模块搜索,例如:

    pythonpath = /opt/web2py/
    pythonpath = /opt/anaconda/lib/python3.9/site-packages/
    

    所以,我遇到了同样的错误。并通过编辑 uwsgi vassal 配置修复。

    我认为问题的核心是虚拟环境是用符号链接创建的或者有一些内部相对路径,所以 uwsgi 内部的一个孤立进程找不到模块。

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 2012-12-21
      • 2020-01-02
      • 2013-06-27
      • 2015-05-08
      • 2023-03-15
      • 2019-04-03
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多