NX 系统环境 python3.6 部署 PPOCR 报错记录

本文记录了在NX系统环境下使用Python3.6部署PPOCR遇到的问题及解决过程,包括因numpy版本不匹配导致的_import_name‘_validate_lengths’错误、scikit-image安装难题及其解决方法。

NX 系统环境 python3.6 部署 PPOCR 报错记录

前言(这环境,就硬配)

  • 问:为什么要用系统环境,不用 conda?
  • 答:因为 conda 的 ARM 端 python 最低只支持 3.7,而 paddlepaddle 提供的 Jetpack4.4 的 whl 只有 python3.6。

  • 问:干嘛非要用 Jetpack4.4
  • 答:绝影里就这版本,我 XXX 没办法。

  1. apt get install pythonXXX 的 对应 python site-packages 在用户目录下的~/.local/lib/python3.6/site-packages中,pip 安装的包都在这里。
  2. /usr/lib/python3/dist-packages/这个路径下,NX自带了很多配置的包。

错误记录

ImportError: cannot import name ‘_validate_lengths’

该错误出现在 最后调用检测程序时

错误原因:numpy版本不匹配,无法导入_validate_lengths

解决方法:

根据提示,进入 arraycrop.py 中,看到


记着是以下两个函数解除注释

  • def _normalize_shape(ndarray, shape, cast_to_int=True):
  • def _validate_lengths(narray, number_elements):
安装scikit-image

scikit-image这个库就离谱,在python3.7里安装屁事没有,在python3.6里安装,要么进度条一直转着,像是网不好的样子,反复确定换了源也没反应。

要么就是全片爆红,安装过程会不断地从scikit-image的高版本一路下载到低版本,然后每次安装都报错,大概类似于

  ERROR: Command errored out with exit status -4:
   command: /usr/bin/python3.6 /home/ysc/.local/lib/python3.6/site-packages/pip/_vendor/pep517/in_process/_in_process.py get_requires_for_build_wheel /tmp/tmp92nk3ap8
       cwd: /tmp/pip-install-ss7tgzhb/scikit-image_fc90552b1a214ccda82d1cae81fcd1bf
  Complete output (0 lines):


 ERROR: Command errored out with exit status -4:
   command: /usr/bin/python3.6 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ss7tgzhb/scikit-image_ebfb42b343c04f779c0756a132dd2855/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ss7tgzhb/scikit-image_ebfb42b343c04f779c0756a132dd2855/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-hy6epp37
       cwd: /tmp/pip-install-ss7tgzhb/scikit-image_ebfb42b343c04f779c0756a132dd2855/
  Complete output (0 lines):


WARNING: Discarding https://pypi.tuna.tsinghua.edu.cn/packages/3d/b3/b9fdd4dead798cf9c654f2ffee24caa8e398ee27921914539d1e5525b754/scikit-image-0.17.1.tar.gz#sha256=1e2e2cf2572549bdb20b88a0f0ac275eea9f04f78b2b6973afdc3f329a73c75c (from https://pypi.tuna.tsinghua.edu.cn/simple/scikit-image/) (requires-python:>=3.6). Command errored out with exit status -4: python setup.py egg_info Check the logs for full command output.
  Using cached https://pypi.tuna.tsinghua.edu.cn/packages/07/ed/58a5157aa484c6aa4e33d4190fa235ce0c4a78010ddf592af4fc257b539f/scikit-image-0.16.2.tar.gz (28.9 MB)
  Preparing metadata (setup.py) ... error
  ERROR: Command errored out with exit status -4:
   command: /usr/bin/python3.6 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-lm6zqk4n/scikit-image_7ff52823308443e9981c7c523c3952a3/setup.py'"'"'; __file__='"'"'/tmp/pip-install-lm6zqk4n/scikit-image_7ff52823308443e9981c7c523c3952a3/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-um2kxfx9
       cwd: /tmp/pip-install-lm6zqk4n/scikit-image_7ff52823308443e9981c7c523c3952a3/
  Complete output (0 lines):

简直离大谱。。。

解决方法:
最后大概也忘了是怎么解决的了
尝试了N种方法
如下:

一、
sudo pip install scikit-image --user

二、
sudo pip install --ignore-installed --user scikit-image

三、

  • 使用pip3 install scikit-image 安装一直报错,可能是通过pip安装要依赖numpy,scipy等包,而且与版本有关系,可能会因为这些原因导致一直安装不上,那么需要对其进行修正,可以使用命令进行修复:
    sudo apt-get install python3-skimage
  • 安装成功。
    假如发现安装的版本太低:
    运行命令:
    pip install -U scikit-image
    更新包版本
证书签名过期

sudo apt-get update报错,如下:

无法安全地用该源进行更新,所以默认禁用该源
校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。
下列签名无效

问题原因:
/etc/pki/tls/certs/ca-bundle.crt 文件存储了各大证书颁发证的根证书交叉文件。
curl 访问https网站时,会比对这个文件里的根证书。如果这个文件过老,那就是有新的根证书未加入到这个文件里,导致curl无法正常访问https网站。
所以,你要么更新这个包(文件),要么可以选择手动添加证书进去,当然,你可以使用 curl -k 跳过证书验证。

解决方法:

  • 方法1:sudo apt-get install ca-certificates
  • 方法2:pkgs.org,自行下载deb格式,并dpkg安装
ModuleNotFoundError: No module named ‘apt_pkg’
  • 安装
    sudo apt install python3-apt
  • 进入包文件目录
    cd /usr/lib/python3/dist-packages/
  • 改名字
    cp apt_pkg.cpython-36m-x86-64-linux-gnu.so.so apt_pkg.so
非法指令 (核心已转储)

1.短暂解决:
在命令行输入

export OPENBLAS_CORETYPE=ARMV8
也可以采用增加系统变量方法,可以进行全局修改。

将“export OPENBLAS_CORETYPE=ARMV8”加入到“~/.bashrc”中

本文由mdnice多平台发布

<think> 嗯……用户明确询问ROS Melodic对Python 3.6的支持情况。这个问题在ROS社区很典型,需要从技术实现和实际应用两个层面拆解。 查阅引用时注意到关键矛盾点:科研所的Python3环境与Melodic默认Python2.7冲突,导致cv_bridge崩溃。引用[1]详细描述了这种版本冲突如何破坏libgcc动态库加载,连pthread_cancel都失效了——这显然是底层环境错乱的表现。用户提到最终被迫全系统迁移到Python3.6的解决方案,侧面印证了官方支持不足的事实。 引用[2][3]提供了两种迂回方案:要么改用ROS2 foxy(明确支持Python3),要么通过anaconda虚拟环境隔离。但前者需要重写代码,后者可能引入新的依赖冲突。考虑到用户项目涉及软硬件集成(Jetson Xavier NX),更换ROS版本的成本显然高于处理Python兼容性问题。 技术细节上需要强调:Melodic的catkin构建系统原生绑定Python2.7,强行用Python3编译核心包会导致CMake配置链断裂。社区方案本质都是hack——手动修改CMakeLists.txt里的PYTHON_EXECUTABLE路径,或像引用[1]那样重建cv_bridge。这些操作可能引发级联反应,比如ROS节点无法发现彼此(master解析异常)。 用户提供的错误日志"libgcc_s.so.1 must be installed"很有价值,这实际是GLIBC动态链接问题。当Python3强行加载Python2.7编译的C++扩展时,符号表(symbol table)错位就会触发此类崩溃。建议后续回复时补充诊断方法:用ldd查cv_bridge.so的依赖树,或用strace跟踪rospy的库加载顺序。 要不要提Docker方案?引用[2]的docker教程确实优雅,但Jetson平台ARM架构的镜像兼容性需要额外验证。这个信息密度过高,可能放在进阶方案里更合适。 </think> 根据引用内容和ROS社区实践,**ROS Melodic不完全原生支持Python 3.6**,但可通过特定方法实现兼容。以下是关键分析: --- ### **核心结论** 1. **默认限制** - ROS Melodic官方设计基于**Python 2.7**(Ubuntu 18.04默认版本)。 - 核心工具链(如`rospy`、`catkin`)及官方软件包(如`cv_bridge`)默认编译为Python 2.7版本[^1][^3]。 2. **Python 3兼容性挑战** - **依赖冲突**:混合使用Python 2.7与3.6环境时,动态库加载可能冲突(如`libgcc_s.so.1`错误)[^1]。 - **编译问题**:Python 3需单独编译核心组件(如`cv_bridge`),但可能破坏ROS环境路径[^1]。 --- ### **可行的解决方案** #### **方案1:全系统迁移至Python 3环境** ```bash # 重新编译整个ROS Melodic(含依赖库) sudo apt remove ros-melodic-* export PYTHON_VERSION=3.6 sudo apt install python3-catkin-pkg python3-dev mkdir -p ~/melodic_py3/src && cd ~/melodic_py3 catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 ``` - **优点**:彻底解决版本冲突。 - **缺点**:需重编译所有包,可能引入新依赖问题[^1]。 #### **方案2:隔离Python 3关键组件** ```bash # 仅编译Python 3版cv_bridge git clone https://github.com/ros-perception/vision_opencv.git cd vision_opencv/cv_bridge mkdir build && cd build cmake -DPYTHON_EXECUTABLE=/usr/bin/python3 .. make -j4 ``` - **使用前**:通过`source`加载独立环境(需谨慎处理`PYTHONPATH`)。 - **风险**:若与其他Python 2.7节点交互,仍可能崩溃[^1]。 #### **方案3:改用ROS 2或Docker** - **ROS 2 Foxy**:原生支持Python 3.6,避免编译问题(引用[2])。 ```bash # Docker示例(解决环境隔离) docker run -it --net=host osrf/ros:foxy-desktop ``` - **Docker优势**:隔离宿主系统,保留Melodic环境的同时部署Python 3应用[^2]。 --- ### **问题根源分析** | 现象 | 原因 | |--------------------------|----------------------------------------------------------------------| | `cv_bridge`转换失败 | Python 2.7编译的库无法被Python 3.6调用 | | `libgcc_s.so.1`加载错误 | 动态库路径被混合环境破坏(Python 3的`LD_LIBRARY_PATH`覆盖系统路径) | | `rospy`调用崩溃 | Python解释器版本与C++扩展不匹配 | > **建议优先级**: > 短期测试 → **方案2隔离编译**;长期项目 → **方案3迁移ROS 2**;系统级开发 → **方案1全环境重构**。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值