Fatal Python error: initfsencoding: unable to load the file system codec

Fatal Python error: initfsencoding: unable to load the file system codec

我已经创建了一个简单脚本的 .exe 文件,目的是 运行 它在服务器上,但是我似乎无法弄清楚这个错误的含义或在线找到任何答案。故障码如下:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00003c8c (most recent call first):

为了做到这一点,我使用了 pyinstaller

pyinstaller --onefile MyScript.py

当这不起作用时,我也尝试过

pyinstaller MyScript.py

我正在 运行ning windows 10,python 3.7,在管理员命令提示符下,在 C:\ 文件目录中。

我的sys.path是

['', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\python37.zip', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\DLLs', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32', 'C:\Users\user\AppData\Roaming\Python\Python37\site-packages', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\win32' , 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\win32\lib', 'C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\Pythonwin']

感谢任何帮助

看起来这是由于 python 安装中的一些问题导致的。您确定 python 配置正确吗?你把它添加到 ENVIRONMENT VARIABLES 了吗?

很可能是因为您的 PYTHONPATH,即定位 site-packages 的配置不正确。一旦您将 PYTHONPATH 指向正确的 python3.x 安装,它应该可以正常工作。

从您的 cmd 启动 python 并检查它正在加载哪些站点包。

import sys
sys.path

然后验证 PYTHONHOME

中实际存在的内容

所以我设法通过重建 exe 文件并将所有站点包从 python 主页转储到 exe dist 文件夹来解决这个问题。将再次检查它们以找出导致问题的原因。

编辑

我缩小了范围,发现具体问题是 plotly 包没有被转储到 dist 文件夹中。我不确定为什么,但这是我使用的唯一一个 pyinstaller 无法接收的包

此错误意味着 Py_SetPath 强制 python 使用不包含 python38.zip 的路径,将 python38.zip 的完整路径名添加到 Py_SetPath,或者不使用 Py_SetPath 而是使用 python38._pth。

#define PY_SSIZE_T_CLEAN
#include <Python.h>


int main(int argc char **argv)
{
        Py_SetPath(L"C:\path-to\python-3.8.5-embed-amd64\python38.zip;C:\path-to\python-3.8.5-embed-amd64");
        Py_Initialize();
        // ...
}

使用 --standalone 将使用整个 python 环境构建二进制文件。您不需要 python 在目标机器上安装 运行 它。

我刚刚将以下内容添加到系统变量中:

PYTHONPATH --------------------------C:\Python37

我收到与 EcSync 完全相同的错误消息。尽管大多数人都指出 python 设置错误,但这对我来说并非如此 - 除了当我收到错误时我的系统从一天到下一天都没有改变这一事实,我的环境变量与pythonsys.path

EcSync 通过包含一个缺失的模块解决了这个问题,但他们的回答被否决了。我不得不补充说这个错误也是由缺少模块引起的。线索在错误信息中:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

我只是修改了我的规范文件以包含编码模块,然后一切正常。为此,您可能需要指定 pyinstaller 使用提供的规范文件,而不是从头开始制作规范文件,并且您必须将丢失模块的路径放入 Analysisdatas 列表中。参见 here