Openwrt下安装Python3.5运行出现异常:Fatal Python error: Py_Initialize: Unable to get the locale encoding

2023-11-02

环境说明:

Openwrt + Python 3.5

依赖的库:

libbz2, expat, libopenssl, libpthread, zlib, libffi, libcrypto, libncurses, libpanel 

使用说明:

之前已经安装过python2.7.3,运行很正常。后来需要使用Python3版本,所以需要升级。

经过一番移植、修改,终于安装成功了。结果运行在设备端运行python3命令时出现如下异常:

>>>:/# python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/lib/python3.5/encodings/__init__.py", line 34
    _cache = {}
             ^
SyntaxError: invalid syntax


Current thread 0x2aab0310 (most recent call first):
Aborted

提示:无法找到locale encoding,解析语法错误


分析:

这个错误的原因如下:由于是交叉编译,在make过程中需要使用pgen和python文件,这时不能使用target环境中的pgen和python,而只能使用host环境中的pgen和python(这两个文件是在Host Install时安装的)。在Configure阶段,是在Makefile中,有从编译环境中拷贝文件的操作:

define Host/Install
    $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin/
    $(MAKE) -C $(HOST_BUILD_DIR) HOSTPYTHON=$(HOST_BUILD_DIR)/python install
    $(INSTALL_BIN) $(HOST_BUILD_DIR)/Parser/pgen $(STAGING_DIR_HOST)/bin/pgen3
    $(INSTALL_BIN) $(HOST_BUILD_DIR)/Programs/_freeze_importlib $(STAGING_DIR_HOST)/bin/_freeze_importlib
endef
注意:此时在编译环境中安装的文件时 pgen3

define Build/Configure
    -$(MAKE) -C $(PKG_BUILD_DIR) distclean
    (cd $(PKG_BUILD_DIR); autoreconf --force --install || exit 0)
    # The python executable needs to stay in the rootdir since its location will
    # be used to compute the path of the config files.
    @echo "alantest:STAGING_DIR_HOST=$(STAGING_DIR_HOST)"
    $(CP) $(STAGING_DIR_HOST)/bin/<span style="color:#ff0000;">pgen </span>$(PKG_BUILD_DIR)/hostpgen
    $(CP) $(STAGING_DIR_HOST)/bin/python$(PYTHON_VERSION) $(PKG_BUILD_DIR)/hostpython</span>
    $(call Build/Configure/Default,$(CONFIGURE_ARGS))
endef
注意:此时从编译环境中拷贝的文件时 pgen


由于之前使用python2.7.3时,已经在$(STAGING_DIR_HOST)/bin/目录下安装了pgen和python文件,升级到python3.5时,就会拷贝python2.7.3的pgen文件。

而python2和python3版本存在兼容性问题,所有会出现如题所示的解析错误。


解决方案:

define Build/Configure
    -$(MAKE) -C $(PKG_BUILD_DIR) distclean
    (cd $(PKG_BUILD_DIR); autoreconf --force --install || exit 0)
    # The python executable needs to stay in the rootdir since its location will
    # be used to compute the path of the config files.
    @echo "alantest:STAGING_DIR_HOST=$(STAGING_DIR_HOST)"
    $(CP) $(STAGING_DIR_HOST)/bin/pgen3 $(PKG_BUILD_DIR)/hostpgen
    $(CP) $(STAGING_DIR_HOST)/bin/python$(PYTHON_VERSION) $(PKG_BUILD_DIR)/hostpython</span>
    $(call Build/Configure/Default,$(CONFIGURE_ARGS))
endef
注意:此时从编译环境中拷贝的文件时 pgen3


问题解决,可以再target端执行python3了。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openwrt下安装Python3.5运行出现异常:Fatal Python error: Py_Initialize: Unable to get the locale encoding 的相关文章

随机推荐

  • Handler processing failed; nested exception is java.lang.NoClassDefFoundError

    在使用阿里云发送短信接口时出现此错误 原因是springmvcjar包和阿里云jar包出现冲突 建议使用下面两个版本
  • 【工具】VirtualBox虚拟机安装Windows操作系统

    前面的文章中介绍了VirtualBox虚拟机的安装 VirtualBox虚拟机中如何安装操作系统 是本文的重点 下面将进行详细介绍 使用VirtualBox虚拟机安装Windows操作系统有很多好处 主要包括以下几点 节省资源 通过虚拟化技
  • Spring Boot将声明日志步骤抽离出来做一个复用类

    上文Spring Boot日志基础使用 设置日志级别中我们写了个比较基本的日志操作 但也随之产生了一个问题 我们这行代码 能不能不写 具体说 我们不希望每个需要日志的类都声明一个在这 看着太不美观了 我们最简单方法当然是继承 我们找个目录创
  • 论python自动化测试(3)- 自动化框架及工具

    python自动化测试 3 自动化框架及工具 1 概述 手续的关于测试的方法论 都是建立在之前的文章里面提到的观点 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍
  • Linux Common Comment in Practices

    Linux中的命令的确是非常多 但是我们只需要掌握我们最常用的命令就可以了 当然你也可以在使用时去找一下man 他会帮你解决不少的问题 然而每个人玩Linux的目的都不同 所以他们常用的命令也就差异非常大 因为不想在使用是总是东查西找 所以
  • 网络安全等级保护合规一览

    公众号关注 WeiyiGeek 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 前言 0x01 等保2 0基本要求 0x02 等保定级 1 定级流程 2 定级比较 3 定级通用要求 0x03 合规流程 0
  • 自动化平台搭建之定制log系统

    log系统概述 我们搭建的自动化平台 无论是Web和Android 都少不了一个重要的模块 那就是log输出模块 该模块记录了整个自动化平台运行期间的日志记录 完成自动化测试后 我们可以通过日志追踪和分析fail项 根据自动化平台log输出
  • Intellj IDEA基础设置

    基础配置 view toolbar 配置jdk configure project defaults project structure new jdk 路径 添加插件 configure plugins 配置jvm内存 configure
  • Bootstrap的CSS类积累学习

    要看哪个的介绍 搜索关键词就行了 001 container 这是Bootstrap中定义的一个CSS类 它用于创建一个具有固定宽度的容器 比如 container类将 div 元素包装成一个固定宽度的容器 详情见 https blog c
  • STL vector的N种构造方式

    1 使用默认无参的构造函数进行构造 vector
  • 设计一算法,将已建立的单链表进行逆置

    单链表逆序有很多种方法 可是好多种方法都是逆序后就不能再使用之前定义的函数了 因为你的头结点变动了 不再是之前所定义的first或是head了 所以之前的方法都要重写 后来我终于想到了种很好的方法了 为了不重开空间 我们可以就在原来的那个单
  • leetcode:37. 解数独

    题目链接 37 解数独 文章目录 题目描述 思路 代码 题目描述 编写一个程序 通过填充空格来解决数独问题 数独的解法需 遵循如下规则 数字 1 9 在每一行只能出现一次 数字 1 9 在每一列只能出现一次 数字 1 9 在每一个以粗实线分
  • git lfs搭建 —— ubuntu20.04

    一直使用git lab 临时需要放一些pdf文档但有不需要git来版本管理 个人感觉比较占用资源 百度了一通 决定用git lfs 同时发现git lab有内置lfs使用说明 结合网上查得 总结如下 也是个人操作留档 本人使用vscode
  • 学生的姓名 ,年龄,性别,班级及爱好IDEA代码

    学生的姓名 年龄 性别 班级及爱好AIDE代码 package zy 学生类 class Person 属性 姓名 年龄 性别 班级 爱好 String name 姓名 int age 年龄 String sex 性别 int classN
  • 【数据结构】LoopQueue 循环队列

    数据结构源码 接口 public interface Queue
  • yarn安装依赖包报错 error An unexpected error occurred: “https://registry.npm.taobao.orgnpm/element-ui: get

    yarn安装依赖包报错 error An unexpected error occurred https registry npm taobao orgnpm element ui getaddrinfo ENOTFOUND registr
  • NAT(网络地址转换协议)

    目录 NAT 网络地址转换协议 作用 NAT转换内部地址范围 主要应用方向 NAT的优点 实验 1 静态NAT 一个内网地址对一个公网地址 2 动态NAT PAT 多个内网地址对多个公网地址 3 Easy ip 多个内网地址对一个接口 4
  • shell脚本实战:linux系统初始化和mysql8.0编译安装

    linux系统初始化脚本 bin bash version v1 author xingdian cat lt lt eof a 关闭防火墙 b 关闭selinux c 网络连通性检测 d 配置yum仓库 q 退出 eof read p 请
  • STM32 USB声卡录音(USB Microphone),基于CubeMX修改

    目录 说明 CubeMX配置 Pinout Clock Configuration Configuration 工程设置 代码工程修改 修改USB设备描述符 修改数据传输配置 声卡测试 说明 CubeMX生成的USB Audio Devic
  • Openwrt下安装Python3.5运行出现异常:Fatal Python error: Py_Initialize: Unable to get the locale encoding

    环境说明 Openwrt Python 3 5 依赖的库 libbz2 expat libopenssl libpthread zlib libffi libcrypto libncurses libpanel 使用说明 之前已经安装过py