我正在尝试在虚拟环境中启动我的 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。
我看到你的 PYTHONHOME 设置为
PYTHONHOME = '/home/env3/educ'
。尝试检查它是否真的存在。
我的解决方案是删除
PYTHONHOME
环境变量。
对于您来说,可能就是这样,或者将该变量设置为另一个值。
这可以在 Windows 上运行,也可以在 Linux 上运行。如果有人在 Linux 上尝试这个,请在这里发表评论!
CPython 开发人员在此处确认了解决方案。 :
这不是 Python 错误,这是在不需要 PYTHONHOME 和/或 PYTHONPATH 时设置它们的症状。几乎在所有情况下,您都不需要设置其中任何一个;
对于 PYTHONHOME几乎总是设置错误。
就我而言这是由我的管理员的基础环境引起的。我会尝试通过以下方式删除 PYTHONHOME 和 PYTHONPATH 变量
unset PYTHONPATH
unset PYTHONHOME
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
PYTHONHOME
import os
if 'PYTHONHOME' in os.environ:
del os.environ['PYTHONHOME']
说明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']
),那么问题就会消失。
home=
变量,它解决了问题。
http=127.0.0.1:8000 。 这解决了我的问题。
python.exe setup.py install(记下“.exe”)