引言
在NVIDIA Jetson NX等ARM架構的嵌入式AI板子上搭建Python開發環境,特別是安裝像NumPy、OpenCV這樣包含C/C++底層代碼的科學計算庫時,經常會遇到編譯失敗、耗時過長或依賴沖突等問題。這些問題尤其在通過pip
從源代碼編譯安裝時更為突出,例如常見的ModuleNotFoundError: No module named 'skbuild'
或Cython
編譯錯誤。
本文將介紹一種通過APT包管理器快速、穩定地安裝NumPy
、scikit-learn
和OpenCV
的方法。這種方法極大地簡化了安裝流程,避免了繁瑣的源代碼編譯過程。
重要提示:
通過APT安裝的OpenCV版本通常是CPU版本,不會利用Jetson板子特有的GPU(CUDA)加速。如果您對OpenCV的性能有較高要求(例如用于深度學習推理),建議考慮使用預編譯的.whl文件或自行編譯(這兩種方法更為復雜,但能發揮Jetson的硬件優勢)。本文主要面向追求安裝簡便和穩定性的用戶。
前期準備與清理
在開始之前,為了避免新舊安裝方式之間的沖突,我們首先需要清除之前可能失敗的pip
安裝嘗試以及相關的緩存。
-
終止所有不必要的進程:
如果你的Jetson NX當前運行著大量占用CPU和內存的服務(如ROS2節點),請務必在開始安裝前停止它們。最徹底的方法是重啟你的Jetson NX板子,重啟后直接進入終端,不要啟動任何其他應用程序。 -
徹底清除
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-*
-
更新系統包列表和已安裝的包:
這是一個好習慣,確保你的系統是最新的,并且可以獲取到最新的軟件包信息。sudo apt update sudo apt full-upgrade -y # 升級所有已安裝的包,包括依賴關系
核心庫安裝 (使用APT)
現在我們可以開始使用apt
來安裝所需的Python庫了。
-
安裝
NumPy
:
NumPy是Python科學計算的基礎庫,提供高性能的多維數組對象和工具。sudo apt install -y python3-numpy
-
安裝
scikit-learn
:
scikit-learn是一個強大的機器學習庫,依賴于NumPy和SciPy。APT會自動處理這些依賴。sudo apt install -y python3-sklearn
-
安裝
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 ---")
有以下兩種常用方式運行它:
-
直接使用
python3
命令 (最常用):
在終端中,導航到你的my_project.py
文件所在的目錄,然后運行:python3 my_project.py
-
使腳本可執行并直接運行 (Shebang方式):
如果你想讓腳本像普通程序一樣直接運行,可以在腳本文件開頭添加#!/usr/bin/env python3
這一行,并賦予執行權限。- 編輯
my_project.py
文件,在最頂部添加#!/usr/bin/env python3
。 - 給腳本添加執行權限:
chmod +x my_project.py
- 運行腳本:
./my_project.py
- 編輯
重要注意事項
-
OpenCV的GPU加速: 如前所述,通過
apt
安裝的OpenCV版本通常是CPU版本,無法利用Jetson的GPU加速。如果您對性能有較高要求:- 推薦方案: 尋找并安裝專門為Jetson ARM架構和CUDA編譯的
opencv-python
.whl文件。這些文件通常在NVIDIA官方社區、Qengineering等網站上提供。安裝.whl
文件只需幾分鐘,且能充分利用GPU。 - 自行編譯: 如果找不到合適的
.whl
文件,您可以嘗試從OpenCV源代碼進行編譯。這個過程極其耗時且復雜,需要正確配置CMake選項來啟用CUDA加速,并確保所有依賴庫版本兼容。
- 推薦方案: 尋找并安裝專門為Jetson ARM架構和CUDA編譯的
-
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開發!