【问题标题】:Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding, when trying to start uwsgi致命的 Python 错误:init_fs_encoding: 尝试启动 uwsgi 时未能获取文件系统编码的 Python 编解码器
【发布时间】:2021-03-18 22:46:27
【问题描述】:

我正在尝试在我的虚拟环境中启动我的 uwsgi 服务器,但是在我添加 plugin python3 选项后,我每次都会收到此错误:

!!! Python Home is not a directory: /home/env3/educ !!!
Set PythonHome to /home/env3/educ
Python path configuration:
  PYTHONHOME = '/home/env3/educ'
  PYTHONPATH = (not set)
  program name = '/home/env3/educ/bin/python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = '/home/env3/educ/bin/python'
  sys.base_prefix = '/home/env3/educ'
  sys.base_exec_prefix = '/home/env3/educ'
  sys.executable = '/home/env3/educ/bin/python'
  sys.prefix = '/home/env3/educ'
  sys.exec_prefix = '/home/env3/educ'
  sys.path = [
    '/home/env3/educ/lib/python38.zip',
    '/home/env3/educ/lib/python3.8',
    '/home/env3/educ/lib/python3.8/lib-dynload',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007efe89db8780 (most recent call first):
<no Python frame>

我还尝试使用python3 -m venv env 创建新的虚拟环境并将项目文件移到其中,但仍然出现相同的错误。 这是我的 uwsgi.ini 文件:

[uwsgi]

base = /home/env3/educ
projectname = educ

plugins = python3
master = true
virtualenv = /home/env3/%(projectname)
pythonpath = %(base)
env = DJANGO_SETTINGS_MODULE=%(projectname).settings.pro
module = %(projectname).wsgi:application
socket = /tmp/%(projectname).sock
chmod-socket = 666

我使用 Python 3.8.5

我正在尝试使用 Django + uWSGI + nginx + Postgresql

如果您需要更多详细信息,我会提供给它

谢谢

【问题讨论】:

  • 我在启动 python 时也遇到了随机错误。不知道为什么会这样
  • 在 WSL2 上遇到同样的问题,而且特别严重,因为我什至无法使用 apt 而不得到这个:Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db &gt; /dev/null; fi' E: Sub-process returned an error code。令人难以置信的令人沮丧,不幸的是 unset 在我的情况下不起作用。

标签: python django ubuntu uwsgi


【解决方案1】:

此消息适用于稍后将找到此页面的有相同问题的人。 我无法使用我的配置启动 uWSGI,而且我在日志文件中有相同的消息。

init_fs_encoding:获取文件系统的Python编解码器失败 编码 Python 运行时状态:核心初始化 ModuleNotFoundError: 没有名为“编码”的模块

问题是 uWSGI 没有足够的权限来访问虚拟环境。当我修复权限时,uWSGI 开始了我的配置。

Denys 在他的消息中发布了 uwsgi.ini 配置。估计是虚拟环境的路径不对。

base = /home/env3/educ
projectname = educ
virtualenv = /home/env3/%(projectname)

如果虚拟环境是在项目目录中创建的,那么路径应该是这样的:

virtualenv = /home/env3/%(projectname)/env

【讨论】:

    【解决方案2】:

    我通过取消设置 PYTHONHOME 或 PYTHONPATH 来解决这个问题,因为它们会覆盖虚拟环境变量。

    就我而言这是由我的管理员的基础环境引起的。我会尝试通过这样做来删除 PYTHONHOME 和 PYTHONPATH 变量

    unset PYTHONPATH
    unset PYTHONHOME
    

    【讨论】:

    • 你把这个放在哪里?在终端中还是在您尝试运行的文件中?
    • 在终端中,它取消设置 PYTHONPATH 和 PYTHONHOME,“unset”是一个终端命令
    【解决方案3】:

    我在浏览 Bing 而不是 Google 时找到了解决方案。

    我看到你的 PYTHONHOME 设置为 PYTHONHOME = '/home/env3/educ'。尝试检查它是否真的存在。

    解决方案对我来说是删除PYTHONHOME 环境变量。 对您来说,可以是这样,或者将该变量设置为另一个值。 这适用于 Windows,并且肯定适用于 Linux。如果有人尝试这样做,请在此处发表评论!

    一位 CPython 开发人员确认了解决方案 here.

    这不是 Python 错误,这是在不需要 PYTHONHOME 和/或 PYTHONPATH 时设置它们的症状。 在几乎所有情况下,您都不需要设置它们中的任何一个

    对于 PYTHONHOME 设置几乎总是错误

    【讨论】:

    • 我遇到了同样的问题,但对我来说,home 和 path 还没有设置。有什么想法吗?
    • 好的,所以我从我的电脑中删除了 python,然后重新安装它并再次工作,尽管我现在必须重新安装我所有的 pip 库
    猜你喜欢
    • 2020-12-07
    • 2021-12-01
    • 2019-06-02
    • 2019-11-26
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2015-08-26
    • 2018-12-13
    相关资源
    最近更新 更多