树莓派配置环境细节(JDK+pycharm+miniconda+pyqt5+opencv-python)

一、java环境

1.1确认树莓派的版本信息

1.2把压缩包传到树莓派上,然后进行解压

1.3配置环境变量

1.4查看java环境

二、pycharm

三、miniconda

3.1miniconda下载

3.2miniconda 安装

3.3添加 .bashrc 配置

3.4使用conda创建python环境

3.5pytorch + torchvision安装

四、PyQt5

4.1PyQt5及SIP简介

4.2所需环境

4.3PyQt5及SIP安装步骤

4.3.1安装qt5-default

4.3.2配置好python和虚拟环境

4.3.3源码编译安装SIP包

4.3.4源码编译安装PyQt5包

4.4虚拟环境中调用PyQt5的配置

4.5测试PyQt5的版本和功能

五、opencv-python


一、java环境

1.1确认树莓派的版本信息

uname -a

官网下载地址:OpenJDK JDK 18.0.2.1 GA Release 

1.2把压缩包传到树莓派上,然后进行解压

tar -zxvf 文件名

z:表示tar 包是被gzip压缩过的,所以解压时需要用gunzip解压
x:从tar包中把文件提取出来
v:解压的过程中显示文件信息
f:使用文件,后面要立即接文件名,不要再加参数

1.3配置环境变量

先安装gedit

sudo apt-get install gedit

进入/home/pi文件下

然后通过gedit命令打开/home/pi/.bash_profile

gedit /home/pi/.bash_profile

打开文件后在文件尾部加入JDK环境变量的配置,如下所示:(JAVA_HOME为你jdk安装的所在路径)

export JAVA_HOME=/home/pi/downloads/jdk-18.0.2.1
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 添加之后保存退出,然后使用如下命令使其生效

 source  /home/pi/.bash_profile

1.4查看java环境

 如此即可安装成功。

二、pycharm

可以点击这个链接下载Pycharm。
注意我们要下载的是Linux版本的软件。PyCharm有专业版和社区版。专业版的功能更全,所以推荐下载这个版本,但是要收费。社区版是免费的。

 文件默认下载到/home/pi/下载目录下。下载的文件是tar.gz格式的压缩包,需要先对压缩包进行解压操作:

tar zxvf /home/pi/下载/pycharm-community-2022.2.3.tar.gz

其中的pycharm-community-2022.2.3.tar.gz是刚刚下载的PyCharm安装包的文件名,版本号不同,文件名或许会有差异,输入命令的时候注意修改。


将工作命令指向解压好的PyCharm文件中的bin目录:

cd /home/pi/downloads/pycharm-community-2022.2.3/bin

然后用sh命令运行pycharm.sh文件:

sh pycharm.sh

PyCharm就可以顺利运行啦。

三、miniconda

在装完树莓派之后,当你想要使用python去写代码的时候,这个时候由于python的版本容易冲突,且不好配置python环境的原因,在这里建议安装miniconda去配置python环境
树莓派系统自带的默认的python版本是2.7,但是注意并不代表树莓派内部不包含python3的版本,树莓派的桌面好像是依赖于python3的版本,所以尽量别去树莓派内部环境下乱使用rm命令乱删文件。

安装之前查看系统情况:
 

uname -a

3.1miniconda下载

miniconda下载地址:Miniconda — conda documentation

点击链接可以看到如下图,然后选择自己版本号的下载即可。

3.2miniconda 安装

将下载好的sh文件传输到树莓派中,然后使用bash命令进行一键安装

bash /home/pi/Miniconda3-py37_4.9.2-Linux-aarch64.sh

 接下来根据提示,按 Enter 跳过安装协议(注意别按太快,否则会直接退出,由于我已安装成功,未截图,放上我查找的相关博客的截图)

在这里插入图片描述

然后输入 yes同意并开始安装,接下来会提示是否更改默认路径,其默认路径是 /root/miniconda3 ,为了日后使用方便,我们会将安装路径设置成用户目录之下,具体路径/home/pi/miniconda3 ,设置完路径后,等待安装完成即可。 

在这里插入图片描述

3.3添加 .bashrc 配置

安装结束后,python 和 conda 还不能正常使用,我们还需要配置 .bashrc 文件,我们用

gedit ~/.bashrc

打开 ~/.bashrc,在配置文件最后添加以下语句,然后保存即可。

export PATH="/home/pi/miniconda3/bin:$PATH"
# 查看版本信息
conda --version

为了方便以后下载,建议修改一下源地址,请使用镜像官网给出的替换命令,网上有很多命令是错误,被坑了两次,所以在这里贴出地址

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

3.4使用conda创建python环境

# 创建空间名为py36的环境,指定python版本为3.6
conda create -n py36 python=3.6

以下是一些基础命令:

# 不创建的情况下,会有一个默认的环境
conda info -e

# 切换到新环境# linux/Mac下需要使用source activate env_name
source activate py36

#退出环境
source deactivate py36

# 安装numpy
conda install numpy

# 当使用conda安装失败,提示没有类似库的时候,请用pip安装
pip install windrose

# 查看已有包
conda list

3.5pytorch + torchvision安装

下载torch和torchvision

首先获取 torch 与torchvision 安装包点击下载https://download.pytorch.org/whl/torch_stable.html但要注意版本对应,这里是一个大坑,torch 与 torchvision 的版本一定要对照起来,否则会有各种问题 这里我找到了一个版本对照表 :

然后将下载好的torch和torchvision文件上传到树莓派,在conda创建的虚拟环境下(py36这是我的虚拟环境)进行  pip 文件路径     安装即可。

四、PyQt5

在嵌入式ARM 64位平台上,pip方式安装PyQt5时因pip源无编译好的aarch64的whl包,需要下载PyQt5和sip的源码包进行自动编译,通常会编译失败。
虽然sudo apt-get install python3-pyqt5可以安装成功,但apt方式安装的PyQt5包默认安装在usr/bin/python3/dist-packages下,且在多Python版本环境下编译成系统默认python版本的PyQt5库文件,当在树莓派创建的不同Python版本的虚拟环境中时无法调用,故在嵌入式平台上采用源码编译方式安装PyQt5。

4.1PyQt5及SIP简介

PyQt5 是Riverbank 公司的产品,分为开源版本和商业版本,开源版本就包含全部的功能。
SIP 是一个将C/C++库转换为Python 绑定的工具,SIP本来是为了开发PyQt 而开发的,现在也可以用于将任何C/C++库转换为Python 绑定。PyQt5依赖于SIP包。

4.2所需环境

Python版本Python 3.9.2
PyQt5版本5.15.2
SIP版本4.19.25

原博客中使用的python版本为3.7.10,我使用后出现了问题,根据后面编译SIP包的提示才知道需要用3.9.2的版本,不知道问题是不是真的出现在这里,反正我的版本换成了3.9.2就bug了。

4.3PyQt5及SIP安装步骤

4.3.1安装qt5-default

源码编译PyQt5时需要系统的/usr/lib/qt5/bin/路径下有qmake,需先安装qt5-default包,此时默认会安装qmake。

user@admin:~$ sudo apt-get install qt5-default
...
下列【新】软件包将被安装:
  libdrm-dev libegl1-mesa-dev libgl1-mesa-dev libgles1 libgles2-mesa-dev
  libglu1-mesa-dev libglvnd-core-dev libglvnd-dev libopengl0 libqt5concurrent5
  libqt5opengl5-dev libqt5sql5 libqt5sql5-sqlite libqt5test5 libqt5xml5
  libwayland-bin libwayland-dev libx11-xcb-dev libxcb-dri2-0-dev
  libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev
  libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxshmfence-dev
  libxxf86vm-dev mesa-common-dev qt5-default qt5-qmake qt5-qmake-bin
  qtbase5-dev qtbase5-dev-tools qtchooser x11proto-xf86vidmode-dev
  ...
  #验证qmake是否已安装
user@admin:~$ qmake --version
QMake version 3.1

若出现以下情况:则需要使用sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools来代替sudo apt-get install qt5-default

4.3.2配置好python和虚拟环境

按照《Firefly AIO-3399ProC开发板安装RKNN Toolkit 1.6.0开发环境》文章配置python和虚拟环境。命令行切换到虚拟环境:

user@admin:~$ virtualenv -p /usr/bin/python3.7 pyqt5
user@admin:~$ source pyqt5/bin/activate
(pyqt5) user@admin:~$ pip3 list
Package       Version
------------- -------
pip           21.3.1
pkg_resources 0.0.0
setuptools    59.2.0
wheel         0.37.0

4.3.3源码编译安装SIP包

安装编译所需软件包

sudo apt-get install cmake gcc g++
pip3 install --upgrade pip
pip3 install wheel setuptools

编译SIP包

(pyqt5) user@admin:~$ cd ./pyqt5/
(pyqt5) user@admin:~$ tar zxvf sip-4.19.25.tar.gz
pyqt5) user@admin:~/pyqt5$ cd ./sip-4.19.25
(pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo python3 configure.py --sip-module PyQt5.sip
This is SIP 4.19.25 for Python 3.9.2 on linux.
The SIP code generator will be installed in /usr/bin.
The sip.h header file will be installed in /usr/include/python3.7m.
The PyQt5.sip module will be installed in /usr/lib/python3/dist-packages/PyQt5.
The sip.pyi stub file will be installed in
/usr/lib/python3/dist-packages/PyQt5.
The default directory to install .sip files in is /usr/share/sip.
Creating sipconfig.py...
Creating top level Makefile...
Creating sip code generator Makefile...
Creating sip module Makefile...
(pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo make
...
(pyqt5) user@admin:~/pyqt5/sip-4.19.25$ sudo make install
make[1]: 进入目录“/home/user/pyqt5/sip-4.19.25/sipgen”
cp -f sip /usr/bin/sip
cp -f /home/user/pyqt5/sip-4.19.25/siplib/sip.h /usr/include/python3.7m/sip.h
make[1]: 离开目录“/home/user/pyqt5/sip-4.19.25/sipgen”
make[1]: 进入目录“/home/user/pyqt5/sip-4.19.25/siplib”
cp -f sip.so /usr/lib/python3/dist-packages/PyQt5/sip.so
strip /usr/lib/python3/dist-packages/PyQt5/sip.so
cp -f /home/user/pyqt5/sip-4.19.25/sip.pyi /usr/lib/python3/dist-packages/PyQt5/sip.pyi
make[1]: 离开目录“/home/user/pyqt5/sip-4.19.25/siplib”
cp -f sipconfig.py /usr/lib/python3/dist-packages/sipconfig.py
cp -f /home/user/pyqt5/sip-4.19.25/sipdistutils.py /usr/lib/python3/dist-packages/sipdistutils.py
/usr/bin/python3 /home/user/pyqt5/sip-4.19.25/mk_distinfo.py "" /usr/lib/python3/dist-packages/PyQt5_sip-4.19.25.dist-info installed.txt

4.3.4源码编译安装PyQt5包

源码编译PyQt5时时间较长,若无报错耐心等待即可。

(pyqt5) user@admin:~$ cd ./pyqt5/
(pyqt5) user@admin:~$ tar zxvf PyQt5-5.15.2.tar.gz
(pyqt5) user@admin:~/pyqt5$ cd ./PyQt5-5.15.2
(pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo python3 configure.py
Querying qmake about your Qt installation...
Determining the details of your Qt installation...
This is the GPL version of PyQt 5.15.2 (licensed under the GNU General Public
License) for Python 3.9.2 on linux.

Type 'L' to view the license.
Type 'yes' to accept the terms of the license.
Type 'no' to decline the terms of the license.

Do you accept the terms of the license? yes
...
(pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo make -j4
...
g++ -Wl,--version-script=pyrcc.exp -Wl,-O1 -shared -o libpyrcc.so sippyrccRCCResourceLibrary.o sippyrcccmodule.o rcc.o  -lQt5Xml -lQt5Core -lpthread  
cp -f libpyrcc.so pyrcc.so
make[1]: 离开目录“/home/user/pyqt5/PyQt5-5.15.2/pyrcc”
cd Qt/ && ( test -e Makefile || /usr/lib/qt5/bin/qmake -o Makefile /home/user/pyqt5/PyQt5-5.15.2/Qt/Qt.pro ) && make -f Makefile 
make[1]: 进入目录“/home/user/pyqt5/PyQt5-5.15.2/Qt”
gcc -c -pipe -O2 -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -I. -I. -isystem /usr/include/python3.7m -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o sipQtcmodule.o sipQtcmodule.c
rm -f libQt.so
g++ -Wl,--version-script=Qt.exp -Wl,-O1 -shared -o libQt.so sipQtcmodule.o  -lpthread  
cp -f libQt.so Qt.so
make[1]: 离开目录“/home/user/pyqt5/PyQt5-5.15.2/Qt”
(pyqt5) user@admin:~/pyqt5/PyQt5-5.15.2$ sudo make install 
...
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtPrintSupport.pyi /usr/lib/python3/dist-packages/PyQt5/QtPrintSupport.pyi
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtSql.pyi /usr/lib/python3/dist-packages/PyQt5/QtSql.pyi
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtTest.pyi /usr/lib/python3/dist-packages/PyQt5/QtTest.pyi
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtWidgets.pyi /usr/lib/python3/dist-packages/PyQt5/QtWidgets.pyi
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtXml.pyi /usr/lib/python3/dist-packages/PyQt5/QtXml.pyi
/usr/lib/qt5/bin/qmake -install qinstall /home/user/pyqt5/PyQt5-5.15.2/QtDBus.pyi /usr/lib/python3/dist-packages/PyQt5/QtDBus.pyi
/usr/bin/python3 /home/user/pyqt5/PyQt5-5.15.2/mk_distinfo.py "" /usr/lib/python3/dist-packages/PyQt5-5.15.2.dist-info installed.txt
...

4.4虚拟环境中调用PyQt5的配置

进入PyQt5源码编译安装的路径,打包后移动至虚拟环境的dist-packages下并解压

(pyqt5) user@admi:~/pyqt5/PyQt5-5.15.2$ cd /usr/lib/python3/dist-packages/
(pyqt5) user@admin:/usr/lib/python3/dist-packages$ sudo tar zcvf pyqt5.tar.gz ./PyQt5/
./PyQt5/
./PyQt5/pyrcc.so
./PyQt5/QtDBus.pyi
./PyQt5/QtSql.so
./PyQt5/pyrcc_main.py
./PyQt5/QtSql.pyi
./PyQt5/QtNetwork.pyi
./PyQt5/QtNetwork.so
./PyQt5/sip.so
./PyQt5/QtGui.so
./PyQt5/_QOpenGLFunctions_4_1_Core.so
./PyQt5/QtDBus.so
./PyQt5/QtWidgets.pyi
./PyQt5/QtTest.so
./PyQt5/QtOpenGL.so
./PyQt5/QtOpenGL.pyi
./PyQt5/pylupdate.so
./PyQt5/_QOpenGLFunctions_2_1.so
./PyQt5/uic/
./PyQt5/uic/properties.py
./PyQt5/uic/exceptions.py
./PyQt5/uic/Loader/
./PyQt5/uic/Loader/loader.py
./PyQt5/uic/Loader/qobjectcreator.py
./PyQt5/uic/Loader/__init__.py
./PyQt5/uic/pyuic.py
./PyQt5/uic/Compiler/
./PyQt5/uic/Compiler/misc.py
./PyQt5/uic/Compiler/qtproxies.py
./PyQt5/uic/Compiler/qobjectcreator.py
./PyQt5/uic/Compiler/indenter.py
./PyQt5/uic/Compiler/proxy_metaclass.py
./PyQt5/uic/Compiler/__init__.py
./PyQt5/uic/Compiler/compiler.py
./PyQt5/uic/port_v2/
./PyQt5/uic/port_v2/proxy_base.py
./PyQt5/uic/port_v2/string_io.py
./PyQt5/uic/port_v2/as_string.py
./PyQt5/uic/port_v2/__init__.py
./PyQt5/uic/port_v2/ascii_upper.py
./PyQt5/uic/driver.py
./PyQt5/uic/icon_cache.py
./PyQt5/uic/__init__.py
./PyQt5/uic/widget-plugins/
./PyQt5/uic/widget-plugins/qtcharts.py
./PyQt5/uic/widget-plugins/qaxcontainer.py
./PyQt5/uic/widget-plugins/qtwebkit.py
./PyQt5/uic/widget-plugins/qtquickwidgets.py
./PyQt5/uic/widget-plugins/qtwebenginewidgets.py
./PyQt5/uic/widget-plugins/qtprintsupport.py
./PyQt5/uic/widget-plugins/qscintilla.py
./PyQt5/uic/port_v3/
./PyQt5/uic/port_v3/proxy_base.py
./PyQt5/uic/port_v3/string_io.py
./PyQt5/uic/port_v3/as_string.py
./PyQt5/uic/port_v3/__init__.py
./PyQt5/uic/port_v3/ascii_upper.py
./PyQt5/uic/uiparser.py
./PyQt5/uic/objcreator.py
./PyQt5/_QOpenGLFunctions_2_0.so
./PyQt5/QtPrintSupport.so
./PyQt5/QtXml.so
./PyQt5/__init__.py
./PyQt5/sip.pyi
./PyQt5/pylupdate_main.py
./PyQt5/QtGui.pyi
./PyQt5/QtXml.pyi
./PyQt5/QtWidgets.so
./PyQt5/QtCore.pyi
./PyQt5/QtPrintSupport.pyi
./PyQt5/QtTest.pyi
./PyQt5/Qt.so
./PyQt5/QtCore.so
(pyqt5) user@admin:/usr/lib/python3/dist-packages$ sudo cp ./pyqt5.tar.gz /home/user/pyqt5/lib/python3.7/site-packages/
(pyqt5) user@admin:~$ cd /home/user/pyqt5/lib/python3.7/site-packages/
(pyqt5) user@admin:~/pyqt5/lib/python3.7/site-packages$ tar zxvf pyqt5.tar.gz
...

4.5测试PyQt5的版本和功能

(pyqt5) user@admin:~$ python3
Python 3.7.12 (default, Sep 10 2021, 00:21:48) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt5
>>>

五、opencv-python

当pyqt5和opencv-python版本不对应时,会出现以下情况

// 注意看最后一段报错信息
Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
loaded library "/home/XXX/.local/lib/python3.8/site-packages/cv2/qt/plugins/platforms/libqxcb.so"
QObject::moveToThread: Current thread (0x2884760) is not the object's thread (0x5bf1580).
Cannot move to target thread (0x2884760)

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/XXX/.local/lib/python3.8/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.

这是由pyqt5和opencv-python版本冲突导致的,因为在opencv-python4.2.0以上的版本,opencv-python使用了qt库支持。除了安装opencv-python-headless(安装这个就不能使用cv2.imshow功能),还可以将opencv将低版本到4.2.0以下:

①卸载自己已经安装的opencv-python,因为pip安装的往往都是最新版。

②找opencv的镜像文件的网站,进入后如下图所示,下载自己对应的版本。链接在此处Links for opencv-python

③下载后将该文件传输到树莓派中,然后进入待安装的虚拟环境,使用pip命令即可。

当我按照上述三步完成后,发现依然报版本不对应的信息,重点来了,我去/home/pi/miniconda3/envc/py39/lib/python3.9/site-packages/cv2(本人的虚拟路径下的cv2包)包下查看,发现了仍然存在的qt文件,果断将该文件删除,然后问题得到解决。


引用链接:

https://blog.csdn.net/Mo_ney_z/article/details/121335031

https://blog.csdn.net/anyivip/article/details/120379604

https://blog.csdn.net/liu246437/article/details/87723435

https://blog.csdn.net/qq_44595223/article/details/123905293

https://blog.csdn.net/mooncom/article/details/52683409https://blog.csdn.net/mooncom/article/details/52683409

https://zhuanlan.zhihu.com/p/443006210

https://blog.csdn.net/foreverey/article/details/121410672

https://blog.csdn.net/shuoliuchn/article/details/102534944

https://blog.csdn.net/weixin_44756050/article/details/104825269

  • 8
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值