引言

在NVIDIA Jetson NX等ARM架构的嵌入式AI板子上搭建Python开发环境,特别是安装像NumPy、OpenCV这样包含C/C++底层代码的科学计算库时,经常会遇到编译失败、耗时过长或依赖冲突等问题。这些问题尤其在通过pip从源代码编译安装时更为突出,例如常见的ModuleNotFoundError: No module named 'skbuild'Cython编译错误。

本文将介绍一种通过APT包管理器快速、稳定地安装NumPyscikit-learnOpenCV的方法。这种方法极大地简化了安装流程,避免了繁琐的源代码编译过程。

重要提示:
通过APT安装的OpenCV版本通常是CPU版本,不会利用Jetson板子特有的GPU(CUDA)加速。如果您对OpenCV的性能有较高要求(例如用于深度学习推理),建议考虑使用预编译的.whl文件自行编译(这两种方法更为复杂,但能发挥Jetson的硬件优势)。本文主要面向追求安装简便和稳定性的用户。

前期准备与清理

在开始之前,为了避免新旧安装方式之间的冲突,我们首先需要清除之前可能失败的pip安装尝试以及相关的缓存。

  1. 终止所有不必要的进程:
    如果你的Jetson NX当前运行着大量占用CPU和内存的服务(如ROS2节点),请务必在开始安装前停止它们。最彻底的方法是重启你的Jetson NX板子,重启后直接进入终端,不要启动任何其他应用程序。

  2. 彻底清除pip的安装残余和缓存:

    # 终止任何正在运行的 pip 命令 (如果还在运行,可按 Ctrl + C 几次)# 卸载所有可能已部分安装或失败的 Python 包
    pip3 uninstall opencv-python
    pip3 uninstall numpy
    pip3 uninstall scikit-learn
    pip3 uninstall Cython
    pip3 uninstall scikit-build# 清除 pip 的下载缓存,确保下次下载的是干净的版本
    pip3 cache purge# 删除 pip 的临时构建目录(这些通常在 /tmp 下,重启后也会自动清除)
    rm -rf /tmp/pip-build-*
    
  3. 更新系统包列表和已安装的包:
    这是一个好习惯,确保你的系统是最新的,并且可以获取到最新的软件包信息。

    sudo apt update
    sudo apt full-upgrade -y # 升级所有已安装的包,包括依赖关系
    

核心库安装 (使用APT)

现在我们可以开始使用apt来安装所需的Python库了。

  1. 安装NumPy
    NumPy是Python科学计算的基础库,提供高性能的多维数组对象和工具。

    sudo apt install -y python3-numpy
    
  2. 安装scikit-learn
    scikit-learn是一个强大的机器学习库,依赖于NumPy和SciPy。APT会自动处理这些依赖。

    sudo apt install -y python3-sklearn
    
  3. 安装OpenCV及其Python绑定:
    python3-opencv包会安装OpenCV库的核心文件以及Python 3的绑定。

    sudo apt install -y python3-opencv
    

    再次提醒: 这个通过apt安装的OpenCV版本通常是通用CPU版本,无法利用Jetson NX的GPU加速功能。如果您有高性能需求,请务必考虑其他安装方式。

验证安装

安装完成后,我们可以进入Python环境,导入这些库并检查它们的版本,以确认安装成功。

python3

在Python解释器中输入以下命令:

import numpy
print(f"NumPy Version: {numpy.__version__}")import sklearn
print(f"scikit-learn Version: {sklearn.__version__}")import cv2
print(f"OpenCV Version: {cv2.__version__}")# 简单测试一下 OpenCV 和 NumPy 功能,确保其能正常工作
import numpy as np
img = np.zeros((200, 300, 3), dtype=np.uint8) # 创建一个200x300的黑色图像
cv2.rectangle(img, (50, 50), (250, 150), (0, 255, 0), -1) # 在图像上画一个绿色矩形
cv2.imwrite("my_output_image_apt_test.png", img) # 保存图像文件
print("OpenCV (via apt) installed successfully and created my_output_image_apt_test.png")exit() # 退出 Python 解释器

如果所有命令都成功执行,并打印出了版本号,且在当前目录下生成了 my_output_image_apt_test.png 文件,那么恭喜你,你的环境已经搭建成功了!

如何运行Python文件

安装完成后,你可以像运行其他Python脚本一样运行你的文件。

假设你有一个名为my_project.py的Python文件,内容如下:

#!/usr/bin/env python3
# my_project.pyimport numpy as np
import cv2
from sklearn.linear_model import LinearRegressionprint("--- Python Script Started ---")# 使用 NumPy
arr = np.array([1, 2, 3, 4, 5])
print(f"NumPy array: {arr}")# 使用 OpenCV
img = np.zeros((150, 250, 3), dtype=np.uint8)
cv2.circle(img, (125, 75), 50, (255, 0, 0), -1) # 在图像上画一个蓝色圆形
cv2.imwrite("my_circle_image.png", img)
print("Created my_circle_image.png using OpenCV.")# 使用 scikit-learn
X_train = np.array([[1], [2], [3], [4], [5]])
y_train = np.array([2, 4, 5, 4, 5])
model = LinearRegression()
model.fit(X_train, y_train)
print(f"scikit-learn Linear Regression Coefficient: {model.coef_[0]:.2f}")print("--- Python Script Finished ---")

有以下两种常用方式运行它:

  1. 直接使用python3命令 (最常用):
    在终端中,导航到你的my_project.py文件所在的目录,然后运行:

    python3 my_project.py
    
  2. 使脚本可执行并直接运行 (Shebang方式):
    如果你想让脚本像普通程序一样直接运行,可以在脚本文件开头添加#!/usr/bin/env python3这一行,并赋予执行权限。

    • 编辑my_project.py文件,在最顶部添加#!/usr/bin/env python3
    • 给脚本添加执行权限:
      chmod +x my_project.py
      
    • 运行脚本:
      ./my_project.py
      

重要注意事项

  1. OpenCV的GPU加速: 如前所述,通过apt安装的OpenCV版本通常是CPU版本,无法利用Jetson的GPU加速。如果您对性能有较高要求:

    • 推荐方案: 寻找并安装专门为Jetson ARM架构和CUDA编译的opencv-python .whl文件。这些文件通常在NVIDIA官方社区、Qengineering等网站上提供。安装.whl文件只需几分钟,且能充分利用GPU。
    • 自行编译: 如果找不到合适的.whl文件,您可以尝试从OpenCV源代码进行编译。这个过程极其耗时且复杂,需要正确配置CMake选项来启用CUDA加速,并确保所有依赖库版本兼容。
  2. Python虚拟环境(venv): apt安装的Python包是针对系统级别的Python环境。如果你在将来使用venv(Python虚拟环境)来管理项目依赖,这些apt安装的包默认不会在虚拟环境中可用。你需要在激活虚拟环境后,使用pip install在虚拟环境中再次安装这些包(此时pip会尝试下载预编译的.whl文件或再次进行编译)。

结论

通过本文介绍的APT安装方法,你可以快速、简便地在NVIDIA Jetson NX板子上搭建起包含NumPy、scikit-learn和OpenCV的Python开发环境。尽管APT安装的OpenCV版本在GPU加速方面存在局限,但对于大多数日常开发和学习任务而言,它提供了一个稳定且易于维护的基础环境。

希望这篇教程能帮助读者们在Jetson NX上顺利开展Python开发!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93022.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93022.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93022.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot项目中线程池的全面教程

一、线程池基础概念与重要性1.1 为什么需要线程池在Spring Boot应用中,线程池是一种至关重要的并发编程工具,它通过​​复用线程资源​​显著提升系统性能。主要优势包括:​​减少开销​​:避免频繁创建和销毁线程带来的性能损耗​…

机器学习第八课之K-means聚类算法

目录 简介 一、K-means 的核心思想 二、K-means 聚类的工作流程 1. 确定聚类数量 K 2.初始化 K 个簇中心 3.簇分配:将数据点分配到最近的簇 4.更新簇中心:重新计算每个簇的中心 5.判断是否收敛 6.输出聚类结果 三、聚类效果评价方式 四、k-…

【P21】OpenCV Python——RGB和BGR,HSV和HSL颜色空间,及VScode中报错问题解决

P21 1 RGB和BGR2 HSV和HSL,YUV2.1 HSV2.1. 色调H2.1.2 饱和度S2.1.3 明度V2.2 HSL2.3 YUV3 颜色空间转换实战4 VScode中报错问题5 Windows 下 VScode 路径格式(VScode很强大,路径格式写法自由多样)RGB/BGR人眼识别的颜色 &#xf…

.NET 应用程序 Linux下守护进程脚本编写

下面的脚本是生产可用,可靠的sh脚本,用于监控 .NET 应用程序并自动重启。假如你打包发布到Linux的程序名称为MyAspDemo;推荐打包模式为框架依赖:需要在Linux上安装对应的donet版本;1.在Linux下新建一个文件&#xff0c…

图论理论部分

旅游完回来继续学习。 先来看一下图论的理论部分,然后稍微做一下DFS的题目。 图的基本概念 二维坐标中,两点可以连成线,多个点连成的线就构成了图。 当然图也可以就一个节点,甚至没有节点(空图) 图的种…

WebSocket集群方案解析与实现

一、WebSocket集群核心挑战 1.1 关键问题分析 #mermaid-svg-gzRCTMr7wiVCokct {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gzRCTMr7wiVCokct .error-icon{fill:#552222;}#mermaid-svg-gzRCTMr7wiVCokct .error-t…

使用dify搭建hr简历助手-上传简历-对接飞书ai表格

一、需求背景 hr在招聘平台获取简历后,想整理到简历库,在线管理和维护,及其不方便,所以用dify搭建一个简历上传助手,并且能保存到线上表格,方便维护和查看。 先看下最终的效果我们的工作流即可自动获取文件…

《算法导论》第 22 章 - 基本的图算法

大家好!今天我们来深入学习《算法导论》第 22 章的基本图算法。图论是计算机科学中的重要基础,这些基本算法是解决很多复杂问题的基石。本文将结合代码实现,帮助大家更好地理解和应用这些算法。思维导图22.1 图的表示在计算机中,图…

基于PROFINET的西门子PLC通讯:S7-200与S7-1200在自动化仓储中的协同应用

一.行业痛点与解决方案传统仓储物流系统中,采用西门子SMARTS7-200PLC(如CPUSR20、SR30等型号)的设备往往面临三大通讯难题:一是无法直接接入以太网网络,导致多PLC间的数据交互需要通过复杂的串口级联实现,响…

redis实现秒杀超卖问题的解决方案:(仅限于单体项目)

秒杀实现通过乐观锁控制超卖问题通过悲观锁控制每个用户只能下一单,避免用户多次点击,发送的多次下单请求(即多个线程)都成功,避免恶意攻击每个请求访问Tomcat时,就会分配一个线程处理请求业务逻辑:注*以下逻辑中报错也…

Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析

目录 引言:两种语言,两种哲学 开发效率对比:从框架设计看易用性 Python的"开箱即用" Go的"手动组装" 性能对比:从并发模型看效率差异 理论性能对比 实际测试数据 错误处理对比:从编程范式…

初识c语言————排序方法

今天我们学习的是c语言中的排序方法目录:一.冒泡排序法二.选择排序法下面我们正式学习c语言中的排序方法一.冒泡排序法1.冒泡排序法的过程:将无序的数组通过数组之间的大小比较,排成有序的样子2.例如:5,3,4…

爬虫与数据分析结合案例:中国大学排名爬取与分析全流程

爬虫与数据分析结合案例:中国大学排名爬取与分析全流程 一、案例背景与目标 本案例以高三网中国大学排名(网址:2021中国的大学排名一览表_高三网)为数据源,完成从数据爬取到分析可视化的全流程实践。主要目标包括&am…

行业分享丨SimSolid 在汽车零部件开发中应用的可行性调研及实践

*本文源自汽车行业用户范会超投稿1、背景车型短周期开发背景下,高效的仿真技术显得尤为重要。Altair 推出了多款加速设计/仿真的软件,其中无网格软件 SimSolid 与业务有一定的契合度,有必要论证其在汽车零部件结构分析领域的可行性。2、目标评…

MacOS字体看起来比在 Windows 上更好?

字体控们注意啦!🎉你们有没有发现,同样一段文字,在Mac和Windows上看起来就是不一样?Mac上的字仿佛自带柔光滤镜,圆润又舒适;而Windows上的字则像是精心雕琢的刀锋,锐利且清晰。这背后…

Torch -- 卷积学习day1 -- 卷积层,池化层

目录 一、CNN概述 二、卷积层 1、卷积核 2、卷积计算 3、边缘填充 4、步长 5、多通道卷积计算 6、多卷积核卷积计算 7、特征图大小 8、卷积参数共享 9、局部特征提取 10、卷积层API 三、池化层 1、池化层概述 1.池化层的作用 2.池化层类型 2、池化层计算 3、步…

蓝桥杯---第六届省赛单片机组真题

先出手写的代码&#xff0c;代码分析还需要一段时间&#xff0c;不难&#xff0c;大家认真写。#include <STC15F2K60S2.H> #include "Seg.h" #include "LED.h" #include "Key.h" #include "DS1302.h" #include "DS18B20.h&…

GPT-5深度解析:精准、高效、务实的新一代AI引擎

&#x1f31f; GPT-5深度解析&#xff1a;精准、高效、务实的新一代AI引擎在万众瞩目中&#xff0c;OpenAI于2025年8月7日正式推出GPT-5——这一代模型没有华丽的创意革命&#xff0c;却以惊人的准确率提升、断崖式降价和强大的工程能力&#xff0c;悄然重塑了生成式AI的应用边…

oss(阿里云)前端直传

WEB端前端直传 参考文档&#xff1a;web前端直传并设置上传回调 封装oss-upload.ts // 图片上传 import { uploadToken } from /api/uploadFile.js // 获取oss token接口// 定义 OSS 信息类型 interface OssInfo {policy: string;signature: string;x_oss_credential: strin…

vscode uv 发布一个python包:编辑、调试与相对路径导包

背景 最近一直在使用uv做python包管理&#xff0c;用起来很方便。 尤其是在代码上传到github的时候&#xff0c;pyproject.toml 会显示出当前项目依赖的python包。这样在把代码下载到本地之后&#xff0c;直接uv sync就可以很方便地恢复出python环境。 uv 除了有上述优点&…