Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding, when trying to start uwsgi

23,442

Solution 1

I see your PYTHONHOME is set to PYTHONHOME = '/home/env3/educ'. Try to check if it is really there.

The solution for me was to remove the PYTHONHOME environment variable. For you, it can be just that, or setting that variable to another value. This worked on Windows, and would work on Linux for sure. If someone tries this, please post a comment here !

A CPython developer confirmed the solution here. :

This is not a Python bug, this is a symptom of setting PYTHONHOME and/or PYTHONPATH when they’re not needed. In nearly all cases you don’t need to set either of them;

In the case of PYTHONHOME it’s almost always a mistake to set.

Solution 2

I solve this problem by unsetting PYTHONHOME or PYTHONPATH, because they override the virtual environment variables.

In my case this is caused by my admin's base environment. I would try removing PYTHONHOME and PYTHONPATH variables by doing

unset PYTHONPATH
unset PYTHONHOME

Solution 3

This message is for those with the same problem who will find this page later. I couldn't start uWSGI with my config, and I had the same message in logging files.

init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state: core initialized ModuleNotFoundError: No module named 'encodings'

The problem was uWSGI didn't have enough permissions to access the virtual environment. When I fixed the permissions, uWSGI started my config.

Denys posted the uwsgi.ini config in his message. I guess the path to the virtual environment is wrong.

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

If the virtual environment was created in the project directory, then the path should look like this:

virtualenv = /home/env3/%(projectname)/env
Share:
23,442
Denys
Author by

Denys

Updated on January 15, 2022

Comments

  • Denys
    Denys over 2 years

    I am trying to start my uwsgi server in my virtual environment, but after I added plugin python3 option I get this error every time:

    !!! 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>
    
    

    Also I tried to create new virtual environment using python3 -m venv env and moved project files to it, but still the same error. Here is my uwsgi.ini file:

    [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
    

    I use Python 3.8.5

    I am trying to use Django + uWSGI + nginx + Postgresql

    If you need more details I will give it

    Thank you

  • Shep Bryan
    Shep Bryan over 2 years
    Where do you put this? In the terminal or in the file that you are trying to run?
  • CrmXao
    CrmXao over 2 years
    In the terminal, it unsets the PYTHONPATH and PYTHONHOME, "unset" is a terminal command
  • James.L
    James.L over 2 years
    I'm having the same issue, but for me the home and path are already not set. any ideas?
  • James.L
    James.L over 2 years
    ok so i deleted python from my pc and then reinstalled it and its working again, although I do have to reinstall all my pip libraries now
  • vvvvv
    vvvvv about 2 years
    In my case, I added a /bin at the end of the virtualenv path, and that is what was causing the error.