【问题标题】:uWSGI Fails with No module named encoding ErroruWSGI 失败,没有名为编码的模块错误
【发布时间】:2013-04-22 18:12:52
【问题描述】:

我正在尝试使用 Pyramid 设置 uWSGI,但在尝试 uwsgi --ini-paste development.ini 时出现此错误

Python version: 3.2.3

错误信息:

uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 3
Python version: 3.2.3 (default, Oct 19 2012, 20:08:46)  [GCC 4.6.3]
Set PythonHome to /root/path/to/virtualenv
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named encodings

这是我在 development.ini 中的内容

[uwsgi]
socket = /tmp/uwsgi.sock
master = true


processes = 4

harakiri = 60
harakiri-verbose = true
limit-post = 65536
post-buffering = 8192

daemonize = ./uwsgi.log
pidfile = ./pid_5000.pid

listen = 256 

max-requests = 1000

reload-on-as = 128 
reload-on-rss = 96
no-orphans = true

log-slow = true
virtualenv = /root/path/to/virtualenv

我想我已经检查了所有可能的内容,包括以下内容

echo LANG:$LANG LC_CTYPE:$LC_CTYPE
LANG:en_US.UTF-8 LC_CTYPE:

我正在使用 virtualenv,并且在环境处于活动状态时安装了 uWSGI。我还检查了我的虚拟环境的 lib 有一个名为 encoding 的包(指向我的主要 python3.2 安装)

我还检查了this 答案和this

我之前在我的 virtualenv 不活动时安装了 uWSGI,但后来我正确安装了它并从之前的安装中删除了可执行文件和 py 文件。

有没有办法获取详细的日志,如果有请告诉我。 提前致谢

【问题讨论】:

  • 下面有很好的答案表明 virtualenv 可能是原因。另一个潜在的候选者是过时的字节码:就我而言,Python 3.5 字节码干扰了新升级的 Python 3.6 系统。使用pyclean 之类的命令删除字节码文件。

标签: virtualenv pyramid uwsgi


【解决方案1】:

检查一下

virtualenv = /root/path/to/virtualenv

指向正确的路径。 我通过修复这个输入错误的路径解决了我的错误。

【讨论】:

  • 虽然这看起来很明显,但我今天就爱上了它。为什么地球上不能有一条错误消息表明 virtualev 路径不存在?上帝和 uwsgi 只知道答案
  • 我的错误是我给 env 路径的末尾加上了“/bin/”。
【解决方案2】:

就我而言,这基本上是因为我使用 python 2.7 作为主要解释器,而 uwsgi 选择了 pyhon3 插件。您可能需要强制使用:

plugins=python32

python32 是您的 pythhon3 插件的合适名称。

你检查过这个吗:uwsgi python3 plugin doesn't work

【讨论】:

    【解决方案3】:

    刚刚遇到同样的问题。后来我意识到我在virtualenv中安装了带有pip install uwsgi的uwsgi。离开 virtualenv 后,我在本地系统上安装了 uwsgi pip3 install uwsgi(注意我写的是 pip 而不是 pip3)。所以我用pip3 uninstall uwsgi 卸载并用pip install uwsgi 重复。像魅力一样工作。

    【讨论】:

      【解决方案4】:

      我今天也遇到了这个问题,尝试设置plugins=python34,但是在Ubuntu 14.04和Python 3.4.3上都不行

      这是我修复它的方法:

      1. sudo pip uninstall uwsgi

      2. 当我运行 sudo pip install uwsgi 时出了点问题,先运行这个:

        sudo apt-get install python-dev

      3. (sudo)pip install uwsgi

      【讨论】:

        【解决方案5】:

        运行 uwsgi 命令(使用您的选项),就像以下行一样:

        /<path-to-your-virtualenv-bin>/uwsgi --http :8008 --module project.wsgi --venv /<path-to-your-virtualenv> --chdir /<path-to-your-project>

        你会发现问题。

        你错过了你的模块参数吗?

        【讨论】:

          【解决方案6】:

          我有类似的问题。就我而言,问题出在uidguiduwsgi.ini 参数中。 www-data 用户没有权限在 virtualenv 中运行 python。

          【讨论】:

          • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
          • @Raf 什么?这就是答案。 uwsgi 用户运行时权限错误会导致类似错误ImportError: No module named encodings
          【解决方案7】:

          我遇到了类似的错误消息,但有一个 python 版本变体:

          Python version: 3.4.3 (default, Nov 28 2017, 16:44:58)  [GCC 4.8.4]
          

          这是因为尝试使用 python3.6 虚拟环境,但 uwsgi 是为 python3.4 设置的。我使用python3.4重新设置了虚拟环境,一切都很好。

          【讨论】:

            【解决方案8】:

            Edward's answer 的基础上,我改为使用pip3.6 而不是pip3 重新安装uWSGI,Python 3.4.8 是服务器上的默认Python 3:

            $ python3 --version
            Python 3.4.8
            

            【讨论】:

              【解决方案9】:

              检查virtualenv的路径。确保你没有使用这样的东西:~/.virtualenvs/xxx

              ~ 符号指向用户的主目录。所以对于不同的用户,这条路径会指向不同的位置。

              如果不是很放心,请将virtualenv移到/home/.virtualenvs之类的地方。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-09-05
                • 2021-04-27
                • 2013-10-22
                • 1970-01-01
                • 2015-04-03
                • 2014-09-18
                • 1970-01-01
                相关资源
                最近更新 更多