由于打工那边的电脑是ARM架构的银河麒麟(也是个Linux)而且不能联网,我这边的电脑又是AMD架构的Windows系统。我要给他们配置python,看了许多文章并且问了许多AI,这篇文章我就说一下最舒服的方法吧。
一.安装最新版Docker Desktop
首先,我们要使用Docker Desktop,你只管下载最新版(4.x及以上这样才支持多架构模拟)、安装,不用害怕不会用他,用这个工具我们就能在我们AMD的电脑上模拟ARM的系统了。
这就是下载好的Docker了。
二.启用启用 QEMU 模拟支持
桌面shift+右键打开powershell
输入:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
三.拉取一个ARM镜像并运行
我们知道银河麒麟v4和v10都是基于Ubuntu,因此直接拉取一个arm64架构的Ubuntu镜像:
docker run --rm -it --platform linux/arm64 ubuntu bash
这里我们来详细看看这个命令。
docker run就表示要启动一个容器来运行一个镜像;
--rm表示你退出这个容器时,你就删除这个容器了,白玩了;
-it表示你可以在这个容器里操作(安装东西什么的);
--platform linux/arm64表示使用 ARM64位 架构模拟运行,这很关键;
ubuntu bash表示我们拉取的镜像,拉一次就有缓存了,下一次再开一个容器他就不再拉取直接使用了。
怎么退出这个容器呢?输入exit或者直接ctrl+D。
如果你不想退出后这个容器就没了,就白玩了,那你就别加--rm,而且给这个容器取个名字,比如我就叫myarm:
docker run -it --platform linux/arm64 --name myarm ubuntu bash
--name表示他是有名字的,名字就是后面这个myarm,有名字还方便我们后续的操作。
这样,你下次还想进入这个容器,你直接:
docker start -ai myarm
(其他的Docker操作就不过多赘述,你甚至可以直接再Docker Desktop中进行容器的停止和删除)
四.python的安装
现在,我们就进入到ARM64的Ubuntu之中了。
你可以输入:
uname -m
来看看是否是arm64架构的,aarch64就是对的。
1.下载python源码
在我们的宿主机(也就是Windows)上,下载python源码,我就搞个python3.8.10给大家看看。
别选错了嗷,另一个我也不知道是啥。
2.将python源码移动到ARM64容器中
新开一个powershell,右键桌面或者ctrl+x(前面有配图片),输入:
docker cp 'C:\Users\12230\Downloads\Python-3.8.10.tgz' myarm:/root
你注意,你这不能原封不动的抄过去,这里的‘C:\Users\12230\Downloads’是我自己的下载路径,你下载在哪你替换一下。
3.解压python源码
回到我们之前的那个powershell,也就是回到我们的arm64的Ubuntu中,这时候Python-3.8.10.tgz就出现在我们的root里了,我们可以ls看一下:
没有问题,我这有Python-3.8.10,是因为我解压过了,你没解压要解压一下:
tar -zxvf Python-3.8.10.tgz
解压好你再ls一下,就是我那样了。
4.准备编译环境
为啥不直接在对方那里做我上面的事情呢?就是因为编译环境不好搞,因此我们在联网的环境下把编译环境搞好,然后再在这个环境下把python编译好,直接拿过去就好了。
apt update
apt-get install build-essential zlib1g-dev libbz2-1.0 libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb5.3 libpcap-dev xz-utils libexpat1-dev liblzma-dev libssl-dev openssl libffi-dev libc6-dev
为啥不需要sudo?因为通过这种方法你不需要sudo,你的权限已经够了。
5.编译python
一步步来,别着急,很慢,可以刷很久的短视频:
cd /root/Python-3.8.10
./configure --prefix=/opt/python3.8 --enable-optimizations
make -j $(nproc)
make altinstall
注意--prefix=/opt/python3.8是为了将这个python安装到/opt/python3.8,这样好打包带走,不然它默认安装到/usr/local里面,不好往外拿。
6.验证python
运行:
/opt/python3.8/bin/python3.8 --version
如果出现:
这样的版本号,就说明安装成功了。
7.安装第三方依赖库
比如numpy、matplotlib等:
/opt/python3.8/bin/python3.8 -m pip install numpy matplotlib
五.python的打包
cd /opt
tar czvf python3.8-portable.tar.gz python3.8
这样你就得到了可以在其他arm64架构下的基于Ubuntu的Linux操作系统中可以直接使用的python包。
想把他拿到你的宿主机(Windows)里面来?
打开一个新的powershell(讲过两次怎么开了):
docker cp myarm:/usr/local/python3.8-portable.tar.gz 'D:\Project'
后面这个路径就是你想要保存到宿主机(Windows)的路径,自己改就行。
这样你就把这个打包好的Python拿到你的宿主机(Windows)上了,把他拷到你要去的离线环境上,用就行了。
六.pyhton-protable的使用
拷到离线环境后,cd到这个包的路径,然后解压这个包:
cd /root
tar -xzf python3.8-portable.tar.gz
假设你拷到了/root中,这样操作即可。
然后:
/root/python3.8-portable/bin/python3.8 main.py
就可以运行你项目的main函数了。
如果觉得麻烦,可以联系我,我直接把我编译好的ARM64架构的Ubuntu操作系统的python3.8的压缩包发给你,但是里面只有numpy和matplotlib。