致命的Python错误:initfsencoding:无法加载文件系统编解码器

时间:2019-01-08 07:28:08

标签: python exe pyinstaller 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

我正在Windows 10,python 3.7的admin命令提示符下的C:\文件目录中运行。

我的sys.path是

['','C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ python37.zip','C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-zip 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']

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

由于python安装中的某些问题,类似情况正在发生。您确定python配置正确吗?您是否将其添加到ENVIRONMENT VARIABLES中?

最可能的原因是您的PYTHONPATH,即定位site-packages的{​​{1}}配置不正确。将PYTHONPATH指向当前的python3.x安装后,它应该可以正常工作。

一旦从您的cmd启动python并检查它正在加载哪个站点程序包。

import sys
sys.path

然后验证您的PYTHONHOME

中实际存在的内容

答案 1 :(得分:0)

因此,我设法通过重建exe文件并将所有站点包从python home转储到exe dist文件夹来解决此问题。将再次通过它们找出导致问题的原因之一。

答案 2 :(得分:0)

此错误意味着 Py_SetPath 强制 python 使用不包含 python38.zip 的路径,将 python38.zip 的完整路径名添加到 Py_SetPath,或者不使用 Py_SetPath 并使用 python38._pth 代替。< /p>

#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();
        // ...
}

答案 3 :(得分:0)

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