致命的Python错误:init_fs_encoding:尝试启动uwsgi时无法获取文件系统编码的Python编解码器

问题描述 投票:0回答:9

我正在尝试在虚拟环境中启动我的 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 django ubuntu uwsgi
9个回答
43
投票

我看到你的 PYTHONHOME 设置为

PYTHONHOME = '/home/env3/educ'
。尝试检查它是否真的存在。

我的解决方案删除

PYTHONHOME
环境变量。 对于您来说,可能就是这样,或者将该变量设置为另一个值。 这可以在 Windows 上运行,也可以在 Linux 上运行。如果有人在 Linux 上尝试这个,请在这里发表评论!

CPython 开发人员在此处确认了解决方案。 :

这不是 Python 错误,这是在不需要 PYTHONHOME 和/或 PYTHONPATH 时设置它们的症状。

几乎在所有情况下,您都不需要设置其中任何一个

对于 PYTHONHOME

几乎总是设置错误


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

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

unset PYTHONPATH unset PYTHONHOME
    

7
投票
此消息适用于那些遇到相同问题的人,他们稍后会找到此页面。 我无法使用我的配置启动 uWSGI,并且我在日志文件中收到相同的消息。

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

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

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

base = /home/env3/educ projectname = educ virtualenv = /home/env3/%(projectname)
如果虚拟环境是在项目目录下创建的,那么路径应该是这样的:

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

3
投票
需要清除环境变量

PYTHONHOME


解决方案

在发生此错误的行之前添加以下内容

import os if 'PYTHONHOME' in os.environ: del os.environ['PYTHONHOME']
说明

当我在作为 AppImage 运行的 Python 应用程序中使用

cinnamon-screensaver-command --lock 模块(在临时的 squashfs 文件系统中提取并执行自身)时,尝试执行

subprocess
时遇到了这个问题。

Python path configuration: PYTHONHOME = '/tmp/.mount_buskilParXTg/opt/python3.7' PYTHONPATH = (not set) program name = '/usr/bin/python3' isolated = 0 environment = 1 user site = 1 import site = 1 sys._base_executable = '/usr/bin/python3' sys.base_prefix = '/tmp/.mount_buskilParXTg/opt/python3.7' sys.base_exec_prefix = '/tmp/.mount_buskilParXTg/opt/python3.7' sys.executable = '/usr/bin/python3' sys.prefix = '/tmp/.mount_buskilParXTg/opt/python3.7' sys.exec_prefix = '/tmp/.mount_buskilParXTg/opt/python3.7' sys.path = [ '/tmp/.mount_buskilParXTg/opt/python3.7/lib/python38.zip', '/tmp/.mount_buskilParXTg/opt/python3.7/lib/python3.8', '/tmp/.mount_buskilParXTg/opt/python3.7/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'
如果您取消设置环境变量(使用

del os.environ['PYTHONHOME']

),那么
问题就会消失。


2
投票
我的问题的原因在于 virtualenv 的设置。在linux系统下,virtualenv的路径很可能以/home/(您的登录用户名)/env3/开头,而不是/home/env3/。因此,在尝试其他解决方案之前,最好确保 virtualenv 的路径正确。


0
投票
就我而言,我必须删除

home=

 变量,它解决了问题。


0
投票
尝试在 uwsgi.ini 文件中使用

http=127.0.0.1:8000 。 这解决了我的问题。


0
投票
就我而言,我没有取消设置 pythonhome、pythonpath 只需在 cygwin 终端中输入:

python.exe setup.py install(记下“.exe”)


0
投票
有人有其他解决方案吗? 我无法取消设置 PYTHONHOME 因为我将 python 嵌入到 C 中并遇到了同样的问题。 看来我初始化python的时候需要添加一些配置。

© www.soinside.com 2019 - 2024. All rights reserved.