当前位置: 首页 > news >正文

RK3588使用笔记:系统算法依赖库安装

一、前言

嵌入式设备随着需求的提升,不再仅仅只只运行个单机程序那么简单了,社会发展设备升级,都会逐步引用人工智能,涉及到算法模型,这里基础的部分就是算法环境的安装,有的算法是C++,大部分算法是python环境下,本文核心就是安装匹配python算法模型需求的各种环境

目录

一、前言

二、环境

三、正文

1.安装python及相关依赖库

2.常用python工具包pip在线安装命令

3.算法模型运行测试

四、结语


二、环境

RK3588(linux5.10.66+debian/ubuntu/麒麟是桌面文件系统)

调试笔记本window10,安装常用工具winscp,xshell,finalshell,secureRTP等等

VMware17+Ubuntu20.04源码开发环境(这里就依赖于各个硬件平台的厂家提供资料了)

三、正文

首先列出我已经安装好的模型列表requirements.txt

absl-py==2.2.1
astunparse==1.6.3
async-timeout==5.0.1
blinker==1.4
cachetools==5.5.2
certifi==2025.1.31
chardet==3.0.4
charset-normalizer==3.4.1
contourpy==1.1.1
cryptography==2.8
cupshelpers==1.0
cycler==0.12.1
dbus-python==1.2.16
defer==1.0.6
distro==1.4.0
distro-info===0.23kylin1
dnspython==1.16.0
entrypoints==0.3
flatbuffers==25.2.10
fonttools==4.55.3
gast==0.4.0
google-auth==2.38.0
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
greenlet==3.1.1
grpcio==1.70.0
h5py==3.11.0
httplib2==0.14.0
idna==3.10
importlib_metadata==8.5.0
importlib_resources==6.4.5
joblib==1.4.2
keras==2.10.0
Keras-Preprocessing==1.1.2
keyring==18.0.1
kiwisolver==1.4.7
language-selector==0.1
launchpadlib==1.10.13
lazr.restfulclient==0.14.2
lazr.uri==1.0.3
libclang==18.1.1
Markdown==3.7
MarkupSafe==2.1.5
matplotlib==3.7.5
numpy==1.24.4
oauthlib==3.2.2
onboard==1.4.1
opt_einsum==3.4.0
packaging==24.2
pandas==1.2.0
pillow==10.4.0
protobuf==3.19.6
pyasn1==0.6.1
pyasn1_modules==0.4.2
pycairo==1.16.2
pycrypto==2.6.1
pycups==1.9.73
PyGObject==3.36.0
PyJWT==1.7.1
pyparsing==3.1.4
pysmbc==1.0.15.6
python-apt===2.0.0kylin2
python-dateutil==2.9.0.post0
python-debian===0.1.36kylin1
pytz==2025.2
pyxdg==0.26
PyYAML==5.3.1
redis==5.2.1
requests==2.32.3
requests-oauthlib==2.0.0
requests-unixsocket==0.2.0
rsa==4.9
scikit-learn==1.3.2
scipy==1.10.1
seaborn==0.9.0
SecretStorage==2.3.1
simplejson==3.16.0
six==1.17.0
some-package==0.1
tensorboard==2.10.1
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.10.0
tensorflow-cpu-aws==2.10.0
tensorflow-estimator==2.10.0
tensorflow-io-gcs-filesystem==0.35.0
termcolor==2.4.0
threadpoolctl==3.5.0
typing_extensions==4.13.0
tzdata==2024.2
ubuntu-drivers-common==0.0.0
urllib3==2.2.3
wadllib==1.3.3
Werkzeug==3.0.6
wrapt==1.17.2
xkit==0.0.0
zipp==3.20.2
1.安装python及相关依赖库

目前银河麒麟系统自带python3.8.10,无需升级,暂时使用此版本,也可以手动安装一个新的版本python,前提是有网,离线安装很困难。

但此本版没有依赖库,需要安装pip包管理工具,安装方法如下:

安装pip

1.联网,首先验证网络能够正常连接sudo apt-get update,安装python3.8基础依赖

sudo apt-get install python3.8-distutils python3.8-dev

2.麒麟系统默认已经安装了python3.8.10但是没有其他的依赖库,需要安装pip做为开始

3.查看可以安装的pip版本apt-cache madison python3-pip可能支持的版本很低,没关系先安装在升级

4.在线命令更新sudo apt-get install python3-pip安装的版本可能比较低,或者比较高不是需要的指定版本

5.升级pip命令安装指定版本

python3.8 -m pip install --upgrade pip==24.2 -i https://mirrors.aliyun.com/pypi/simple/

6.验证pip安装情况

pip list

python3.8 -m pip --version

pip -V

7.永久配置镜像源

mkdir -p ~/.pip

echo -e "[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com" > ~/.pip/pip.conf

查看pip是否换源成功

cat ~/.pip/pip.conf

卸载pip

#卸载系统 apt 安装的

sudo apt-get remove python3-pip

sudo apt-get autoremove

#卸载用户级安装的

python3.8 -m pip uninstall pip setuptools

#删除所有残留的可执行文件

rm -f /usr/local/bin/pip* /usr/bin/pip* ~/.local/bin/pip*

#删除配置和缓存

rm -rf ~/.pip ~/.cache/pip

卸载python

sudo apt-get remove python3

sudo apt-get autoremove

sudo apt-get remove python3.8

sudo apt-get autoremove

sudo apt-get remove python3.9

sudo apt-get autoremove

其中,比较常用的国内镜像还包括:

1. 阿里云源

pip install -i https://mirrors.aliyun.com/pypi/simple/ [package_name]

2. 豆瓣源

pip install -i https://pypi.doubanio.com/simple/ [package_name]

3. 清华大学源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ [package_name]

4. 华为云源

pip install -i https://mirrors.huaweicloud.com/repository/pypi/simple/ [package_name]

5. 中国科技大学源

pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ [package_name]

这些源都是基于国内的镜像站点提供的,使用这些源可以加快包的下载速度并解决连接问题。你可以根据自己的网络环境选择其中一个源,并将其作为 -i 参数传递给 pip 命令来使用。

2.常用python工具包pip在线安装命令

参照上个文档我们已经安装好了指定版本的python和pip,接下来就是按照指定版本安装相关依赖环境了,所示参照windows开发好的模型去匹配环境,一定要先确保python和pip版本一致,之后在逐步安装其他依赖环境

指定版本:

pip install numpy=1.19.1

pip --default-timeout=100 install numpy=1.19.1(防超时,设置超时时间

pip install -i Simple Index numpy=1.19.1(使用指定源,更快,前面已经换过pip源这里就不用加了)

指定版本不行就添加 --no-binary 参数,避免二进制兼容问题

pip install numpy=1.19.1 --no-binary

在不行就去掉版本安装最新版本:

pip install numpy

升级numpy:

pip install --upgrade numpy

卸载numpy:

pip uninstall numpy

查看numpy的版本:

import numpy

print(numpy.__version__)

查看numpy的安装位置:

pip show numpy

以上命令中,pip是Python的包管理工具,numpy是要安装或管理的Python包。

在已知需求资源包requirement.txt内容时,可以通过下面pip命令快速安装相关依赖库

pip install -r requirements.txt

pip install -i Simple Index -r requirements.txt(使用指定源,更快,前面已经换过pip源这里就不用加了)

实在装不上的库尝试下列方法

sudo apt install python3-h5py

如果遇到兼容性问题(特别是aarch64架构)添加 --no-binary 参数

先安装必要依赖sudo apt-get install libatlas3-base libopenblas-base

强制从源码构建(避免二进制兼容问题)python3.8 -m pip install numpy==1.19.1 --no-binary numpy -i https://mirrors.aliyun.com/pypi/simple/

说明:使用 python3.8 -m pip 确保调用的是 Python 3.8.10 绑定的 pip,如果安装多个python版本,建议使用python3.8 -m pip install numpy==1.19.1这种方式

保存版本:生成 requirements.txt(记录所有指定版本)

python3.8 -m pip freeze > requirements.txt

PS:安装某些特殊的包

tensorflow:

先安装一些依赖

sudo apt-get update

sudo apt-get install -y \
    python3-dev \
    python3-pip \
    gcc \
    g++ \
    make \
    libhdf5-dev \
    libblas-dev \
    liblapack-dev \
pkg-config

依赖h5py先安装

python3.8 -m pip install --pre --extra-index-url https://snapshots.linaro.org/ldcg/python-cache/ h5py

安装tensorflow(特定版本匹配算法模型,否则白装)

python3.8 -m pip install --default-timeout=6000 tensorflow

指定版本

卸载之前(如需) pip uninstall tensorflow

python3.8 -m pip install --upgrade --force-reinstall \
    tensorflow==2.10.0 \
    tensorflow-estimator==2.10.0 \
    -i https://mirrors.aliyun.com/pypi/simple/

3.算法模型运行测试

requirement.txt列表内环境(在产品状态已经固化时使用txt列表环境安装,在调试测试阶段建议直接安装好python和pip,运行模型缺什么库就在线安装什么,会自动匹配库版本,否则txt内库不一定与模型匹配,也不一定与设备内部环境匹配,会一直安装错误报错)

测试我做的python测试程序

测试pytest_local_time.py

import datetime
import time

def display_local_time():
    """持续显示本地时间"""
    print("本地时间显示程序 (按Ctrl+C停止)")
    print("----------------------------")
    
    try:
        while True:
            # 获取当前本地时间
            current_time = datetime.datetime.now()
            
            # 格式化输出
            print(f"\r当前时间: {current_time.strftime('%Y-%m-%d %H:%M:%S')}", end="", flush=True)
            
            # 每秒刷新一次
            time.sleep(1)
            
    except KeyboardInterrupt:
        print("\n程序已停止")

if __name__ == "__main__":
    display_local_time()

执行python pytest_local_time.py

结果:

测试pytest_pandas_numpy.py

import numpy as np
import pandas as pd

def test_pandas_numpy():
    """测试 Pandas 和 Numpy 功能的简单程序"""
    print("=== Pandas 和 Numpy 测试程序 ===")
    
    # 1. 测试 Numpy 功能
    print("\n1. Numpy 测试:")
    # 创建一个 numpy 数组
    arr = np.array([1, 2, 3, 4, 5])
    print(f"创建的数组: {arr}")
    print(f"数组平均值: {np.mean(arr)}")
    print(f"数组标准差: {np.std(arr)}")
    
    # 2. 测试 Pandas 功能
    print("\n2. Pandas 测试:")
    # 创建一个简单的 DataFrame
    data = {
        'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Score': [85.5, 92.3, 88.9]
    }
    df = pd.DataFrame(data)
    print("创建的 DataFrame:")
    print(df)
    
    # 3. 测试两个库的交互
    print("\n3. Pandas 和 Numpy 交互测试:")
    # 在 DataFrame 中添加一列 numpy 计算的结果
    df['Score_Scaled'] = df['Score'].values * 0.8 + 20
    print("添加计算列后的 DataFrame:")
    print(df)
    
    print("\n所有测试完成!")

if __name__ == "__main__":
    test_pandas_numpy()

执行python pytest_pandas_numpy.py

结果:

测试pytest_mostenv.py

import sys
import importlib
from termcolor import colored

# 需要测试的包列表
PACKAGES_TO_TEST = [
    ('absl-py', None),
    ('astunparse', lambda: astunparse.unparse(ast.parse("x = 1"))),
    ('async_timeout', None),
    ('cachetools', None),
    ('certifi', None),
    ('charset_normalizer', None),
    ('contourpy', None),
    ('cycler', None),
    ('fonttools', None),
    ('gast', None),
    ('google.auth', None),
    ('google.auth.oauthlib', None),
    ('google.pasta', None),
    ('greenlet', None),
    ('grpcio', None),
    ('h5py', lambda: h5py.__version__),
    ('idna', None),
    ('importlib_metadata', None),
    ('importlib_resources', None),
    ('joblib', None),
    ('keras', lambda: keras.__version__),
    ('keras_preprocessing', None),
    ('kiwisolver', None),
    ('markdown', lambda: markdown.markdown("**test**")),
    ('markupsafe', lambda: markupsafe.escape("<html>")),
    ('matplotlib', lambda: matplotlib.__version__),
    ('numpy', lambda: numpy.array([1, 2, 3]).sum()),
    ('oauthlib', None),
    ('opt_einsum', None),
    ('packaging', None),
    ('pandas', lambda: pandas.Series([1, 2, 3]).mean()),
    ('PIL', lambda: PIL.__version__),  # Pillow
    ('pip', lambda: pip.__version__),
    ('protobuf', lambda: protobuf.__version__),
    ('pyasn1', None),
    ('pyasn1_modules', None),
    ('pyparsing', None),
    ('dateutil', lambda: dateutil.__version__),  # python-dateutil
    ('pytz', lambda: pytz.utc.zone),
    ('yaml', lambda: yaml.safe_dump({"test": 1})),  # PyYAML
    ('redis', None),
    ('requests', lambda: requests.__version__),
    ('requests_oauthlib', None),
    ('rsa', None),
    ('sklearn', lambda: sklearn.__version__),  # scikit-learn
    ('scipy', lambda: scipy.__version__),
    ('seaborn', lambda: seaborn.__version__),
    ('setuptools', lambda: setuptools.__version__),
    ('six', lambda: six.__version__),
    ('some_package', None),
    ('tensorboard', lambda: tensorboard.__version__),
    ('tensorboard_plugin_wit', None),
    ('tensorflow', lambda: tensorflow.__version__),
    ('tensorflow_estimator', None),
    ('termcolor', lambda: termcolor.colored("test", "red")),
    ('threadpoolctl', None),
    ('tzdata', None),
    ('urllib3', lambda: urllib3.__version__),
    ('werkzeug', lambda: werkzeug.__version__),
    ('wheel', lambda: wheel.__version__),
    ('wrapt', None),
    ('zipp', None)
]

def test_package(package_name, test_func=None):
    """测试单个包是否能正常导入和使用"""
    try:
        # 动态导入包
        module = importlib.import_module(package_name.replace('-', '_'))
        globals()[package_name.replace('-', '_')] = module
        
        # 如果有测试函数则执行
        if test_func:
            test_func()
            
        return True, None
    except Exception as e:
        return False, str(e)

def main():
    print(colored("=== 开始环境依赖测试 ===", "green", attrs=["bold"]))
    print(f"Python 版本: {sys.version}\n")
    
    results = []
    total = len(PACKAGES_TO_TEST)
    success = 0
    
    for package, test_func in PACKAGES_TO_TEST:
        # 特殊处理某些包的导入名称
        display_name = package
        if package == 'PIL':
            display_name = 'pillow'
        elif package == 'yaml':
            display_name = 'PyYAML'
        elif package == 'sklearn':
            display_name = 'scikit-learn'
        elif package == 'dateutil':
            display_name = 'python-dateutil'
            
        ok, error = test_package(package, test_func)
        status = colored("✓ 成功", "green") if ok else colored(f"✗ 失败: {error}", "red")
        results.append((display_name, status))
        
        if ok:
            success += 1
    
    # 打印结果表格
    print("\n" + colored("测试结果:", "cyan", attrs=["bold"]))
    for name, status in results:
        print(f"{name.ljust(25)} {status}")
    
    # 汇总统计
    print("\n" + colored("测试汇总:", "cyan", attrs=["bold"]))
    print(f"总包数: {total}")
    print(f"成功: {success}")
    print(f"失败: {total - success}")
    print(colored(f"成功率: {success/total*100:.2f}%", "green" if success == total else "yellow"))
    
    if success == total:
        print(colored("\n所有依赖包测试通过!", "green", attrs=["bold"]))
    else:
        print(colored("\n部分依赖包测试失败!", "red", attrs=["bold"]))

if __name__ == "__main__":
    main()

执行python pytest_mostenv.py

结果:

测试实际项目算法测试程序

将predict文件夹的BIlstm.py和data2.csv放入目标机中

执行python BIlstm.py

结果:

报错

Tensorflow版本不能超过2.13,卸载安装2.10.0版本

再次测试执行python BIlstm.py

可以看见一直再跑数据

最后这个模型就不公开了,保密要求,其实测试AI生成的py程序,测试环境就ok了

四、结语

算法环境是基础

环境安装好了再去研究如何使用

方法就有很多了,可以只运行python程序,可以结合qt程序或其他程序,可以使用redis中间件做数据信息同步转发等等。

相关文章:

  • Linux信号——信号的产生(1)
  • 自然语言处理(18:(第五章3.)LSTM的实现)
  • 【算法1-5】贪心
  • 一文详解VS2022配置LibTorch环境:Windows平台LibTorch CUDA与cuDNN开发环境配置
  • marked库(高效将 Markdown 转换为 HTML 的利器)
  • 算法训练营第二十九天 | 动态规划(二)
  • TS 中 keyof 和 in 关键字详解
  • 使用Vscode的Remote-SSH通过ssh密钥免输入密码连接远程服务器
  • Java NIO之FileChannel 详解
  • unity客户端面试高频2(自用未完持续更新)
  • Androidstudio开发,实现商品分类
  • mysql 八股
  • android开启Sys V IPC,并使用共享内存编程
  • 流影---开源网络流量分析平台(二)(功能部署--流量探针)
  • C++ 中遍历 std::map
  • 网络基础概念
  • vue在template块里使用v-for循环对象、数组及嵌套结构数据
  • Redis-01.Redis课程内容介绍
  • YO-CSA-T:基于上下文与空间注意力的实时羽毛球轨迹追踪系统解析
  • 为什么package.json里的npm和npm -v版本不一致?
  • 网站建设语录/站长工具是干嘛的
  • 建设自己网站/实时新闻最新消息
  • 网站开发gif图太多耗资源吗/西安关键词网站排名
  • 公司注册需要哪些资料/武汉网站开发公司seo
  • 门户网站建设注意事项/湖南企业seo优化报价
  • 科技企业网站建设/全网品牌推广公司