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

93ze6v8z  于 2022-10-05  发布在  Python
关注(0)|答案(7)|浏览(1039)

我正尝试在我的虚拟环境中启动我的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

我使用的是Python3.8.5

我正在尝试使用Django+uWSGI+nginx+PostgreSQL。

x0fgdtte

x0fgdtte1#

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

我的解决方案删除PYTHONHOME环境变量。对于您来说,可以就是这样,或者将该变量设置为另一个值。这在Windows上奏效,在Linux上肯定也会奏效。如果有人尝试这样做,请在这里发表评论!

CPython开发人员确认了解决方案here.
这不是一个Python错误,这是在不需要PYTHONHOME和/或PYTHONPATH时设置它们的症状。在几乎所有的情况下,你都不需要设置它们中的任何一个

就PYTHONHOME而言,设置几乎总是错误的。

hjqgdpho

hjqgdpho2#

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

在我的情况下这是由我的管理员的基本环境造成的。我会尝试通过执行以下操作来删除PYTHOME和PYTHONPATH变量

unset PYTHONPATH
unset PYTHONHOME
pxyaymoc

pxyaymoc3#

这条消息是为那些有相同问题的人提供的,他们稍后会找到这个页面。我无法使用我的配置启动uWSGI,在日志文件中也出现了同样的消息。
Init_fs_coding:无法获取文件系统的编码Python运行时状态的Python编解码器:核心初始化模块NotFoundError:没有名为“”encoding“”的模块“”

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

丹尼斯在他的消息中发布了uwsgi.ini配置。我想通往虚拟环境的道路是错误的。

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

如果虚拟环境是在项目目录中创建的,则路径应如下所示:

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

nxowjjhe4#

在我的例子中,问题的原因是在Virtualenv的设置中。在Linux系统中,到Virtualenv的路径很可能以/home/(您的登录用户名)/env3/开始,而不是/home/env3/。因此,在您尝试其他解决方案之前,最好确保到您的Virtualenv的路径是正确的。

6yt4nkrj

6yt4nkrj5#

在我的例子中,我必须删除home=变量,它解决了这个问题。

jhdbpxl9

jhdbpxl96#

尝试在uwsgi.ini文件中使用http=127.0.0.1:8000。这解决了我的问题。

osh3o9ms

osh3o9ms7#

在我的例子中,我没有取消对pythonhome的设置,只需在cygwin终端中键入以下内容:

Python.exe setup.py安装(请注意“.exe”)

相关问题