在树莓派上进行机器学习系列之 - 01. 安装配置机器学习环境
这里有坑,请避让
放弃使用 miniconda3 做虚拟环境,折腾一整天,仍然问题不断 @2023-04-24
改用 pyenv 来配置虚拟环境 #todo @2023-04-25
基本信息
硬件环境
Raspberry PI 4B+ 4G 版本
操作系统
Ubuntu 20.04.5
概览
# neofetch
.-/+oossssoo+/-. robert@mlpi
`:+ssssssssssssssssss+:` -----------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04.5 LTS aarch64
.ossssssssssssssssssdMMMNysssso. Host: Raspberry Pi 4 Model B Rev 1.1
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.4.0-1069-raspi
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 5 hours, 58 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 653 (dpkg), 4 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Terminal: /dev/pts/2
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: BCM2835 (4) @ 1.500GHz
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Memory: 174MiB / 3793MiB
+sssshhhyNMMNyssssssssssssyNMMMysssssss+
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
操作系统安装配置
卡刷系统
通过 树莓派 官方提供的刷卡工具,选择安装了 ubuntu 20.04.5 版本的 Linux 操作系统。选择的 tf 卡是 64G 的卡。
Tips: 在刷卡前,配置好一些基本参数,比如 主机名、用户名密码、开启 sshd 服务等。
配置静态 IP
刷卡成功后,进入系统,首选就是配置好 ip 地址,我这里通过 netplan 设置了一个静态 ipv4 的内网地址,方便通过 ssh 登录操作。
- 备份
/etc/netplan/50-cloud-init.yaml
cd /etc/netplan
cp 50-cloud-init.yaml 50-cloud-init.yaml.bak
# 清空原有的源配置 (可选, 根据自己的具体情况进行调整)
echo "" > 50-cloud-init.yaml
- 修改
vim /etc/netplan/50-cloud-init.yaml
,并添加下面配置信息
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.81/24]
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.1,114.114.114.114,8.8.8.8]
- 测试网络配置是否正确
netplan try
- 没有异常的话,就可以应用配置了
netplan apply
配置国内源
- 备份
/etc/netplan/50-cloud-init.yaml
cd /etc/apt
cp source.list source.list.origin
# 清空原有的源配置
cat "" > source.list
- 编辑
vim /etc/apt/source.list
,添加以下内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
- 更新源配置数据库
apt update -y
- 安装常用的一些软件包
# 必选
apt install git wget curl
# pyenv 编译安装 python 源码使用的软件包
apt install make build-essential llvm libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl libncurses5-dev xz-utils libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev tk-dev
# 可选
apt install net-tools neovim neofetch zsh
配置免密登录
1. 客户端生成公私钥
本地客户端 (不是树莓派,是你正在使用的电脑,比如笔记本) 生成公私钥:(一路回车默认即可)
# 客户端执行
ssh-keygen
上面这个命令会在用户目录.ssh文件夹下创建公私钥
cd ~/.ssh
ls
下创建两个密钥:
id_rsa # 私钥
id_rsa.pub # 公钥
2. 上传公钥到服务器
这里的服务器 (树莓派) 地址为:192.168.1.81
用户为:robert
ssh-copy-id -i ~/.ssh/id_rsa.pub robert@192.168.1.81
# 这里需要输入一次登录密码
上面这条命令是写到服务器上的ssh目录下去了
# 在服务器上执行
cd ~/.ssh
cat authorized_keys
可以看到客户端写入到服务器的 id_rsa.pub 公钥内容。
3. 测试免密登录
客户端通过ssh连接远程服务器,就可以免密登录了。
ssh robert@192.168.1.81
# 或
alias ssh2rpi="ssh -i ~/.ssh/id_rsa robert@192.168.1.81"
ssh2rpi
4. 通过别名登录
# 客户端配置
vim ~/.ssh/config
还可以配置到 ~/.ssh/config
文件中
Host RPI4
User robert
HostName 192.168.1.81
Port 22
IdentityFile ~/.ssh/id_rsa
通过 ssh RPI4
即可登录
Python, Pyenv 安装配置
Ubuntu 20.04.5 中已经默认安装了 Python 3.8.10,在网上查阅了一些文档后,发现机器学机相关的库还是 Python 3.7 系列的适应性比较好,较多的库兼容性都被大家推荐,所以这里我也就避免踩坑,选用了 Pyenv 中 安装使用 Python 3.7.11 来进行下面的学习过程。
为 pip 配置国内源
mkdir -p ~/.pip
touch ~/.pip/pip.conf
echo "[global]" > ~/.pip/pip.conf
echo "timeout = 6000" >> ~/.pip/pip.conf
echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> ~/.pip/pip.conf
echo "trusted-host = pypi.tuna.tsinghua.edu.cn" >> ~/.pip/pip.conf
# 更新 pip 版本
pip3 install -U pip
其它可用的国内源参考:
http://mirrors.aliyun.com/pypi/simple # 阿里源
http://pypi.douban.com/simple # 豆瓣源
http://pypi.v2ex.com/simple # v2ex 源
https://pypi.tuna.tsinghua.edu.cn/simple # 特别推荐, 清华大学
安装 Pyenv
通过源码直接安装
git clone --depth 1 https://github.com/pyenv/pyenv.git ~/.pyenv
配置环境变量
bash 配置
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l
zsh 配置
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
exec $SHELL -l
查看 pyenv 是否安装成功
pyenv
输出
pyenv 2.3.17
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
activate Activate virtual environment
commands List all available pyenv commands
deactivate Deactivate virtual environment
exec Run an executable with the selected Python version
global Set or show the global Python version(s)
help Display help for a command
hooks List hook scripts for a given pyenv command
init Configure the shell environment for pyenv
install Install a Python version using python-build
latest Print the latest installed or known version with the given prefix
local Set or show the local application-specific Python version(s)
prefix Display prefixes for Python versions
rehash Rehash pyenv shims (run this after installing executables)
root Display the root directory where versions and shims are kept
shell Set or show the shell-specific Python version
shims List existing pyenv shims
uninstall Uninstall Python versions
--version Display the version of pyenv
version Show the current Python version(s) and its origin
version-file Detect the file that sets the current pyenv version
version-name Show the current Python version
version-origin Explain how the current Python version is set
versions List all Python versions available to pyenv
whence List all Python versions that contain the given executable
which Display the full path to an executable
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
这里,我们发现,pyenv 并没有包含 virtualenv 命令
安装 pyenv 的 virtualenv 插件
virtualenv 用来创建独立的 Python 虚拟环境,可以将每个项目与其他项目独立开来,互不影响,解决了依赖包版本冲突的问题。
上面安装的 pyenv 中,没有提供 virtualenv 插件,通过下面方法安装
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
再确认一下
pyenv
输出
pyenv 2.3.17
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
activate Activate virtual environment
commands List all available pyenv commands
deactivate Deactivate virtual environment
exec Run an executable with the selected Python version
global Set or show the global Python version(s)
help Display help for a command
hooks List hook scripts for a given pyenv command
init Configure the shell environment for pyenv
install Install a Python version using python-build
latest Print the latest installed or known version with the given prefix
local Set or show the local application-specific Python version(s)
prefix Display prefixes for Python versions
rehash Rehash pyenv shims (run this after installing executables)
root Display the root directory where versions and shims are kept
shell Set or show the shell-specific Python version
shims List existing pyenv shims
uninstall Uninstall Python versions
--version Display the version of pyenv
version Show the current Python version(s) and its origin
version-file Detect the file that sets the current pyenv version
version-name Show the current Python version
version-origin Explain how the current Python version is set
versions List all Python versions available to pyenv
virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin
virtualenv-delete Uninstall a specific Python virtualenv
virtualenv-init Configure the shell environment for pyenv-virtualenv
virtualenv-prefix Display real_prefix for a Python virtualenv version
virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.
whence List all Python versions that contain the given executable
which Display the full path to an executable
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
可以看到,pyenv 中的 virtualenv 已经安装好了。
pyenv 命令参考
显示所有已经安装的 python 版本
pyenv versions
显示可以安装的 python 版本
pyenv install --list
# 或
pyenv install -l
安装指定版本的 python
# pyenv install 版本号
pyenv install 3.7.11
设置全局状态的 python 版本
不会在当前目录中生成
.python-version
文件
pyenv global 3.7.11
用来指定当前目录下使用python的版本
会在当前目录中,生成
.python-version
文件
pyenv local 3.7.11
指定当前 shell 中使用的 python 版本
# pyenv shell 版本号
pyenv shell 3.7.11
更新 pyenv 数据库
更新本地数据库,安装指定版本的
python
后使用
pyenv rehash
创建虚拟环境
# pyenv virtualenv {python版本} {虚拟环境名称}
# 比如 创建一个 名字叫 jupyterlab 并使用 python 3.7.11 版本的虚拟环境
pyenv virtualenv 3.7.11 notebook
显示虚拟环境
pyenv virtualenvs
使用/激活指定虚拟环境
# pyenv activate {虚拟环境名称}
pyenv activate notebook
退出当前虚拟环境
pyenv deactivate
删除版本
# rm -rf .pyenv/versions/{python版本}
rm -rf .pyenv/versions/3.8.3
删除虚拟环境
# virtualenv-delete [-f] {虚拟环境名称}, -f 为强制删除
pyenv virtualenv-delete notebook
# 或
# rm -rf .pyenv/versions/{虚拟环境名称}
rm -rf .pyenv/versions/notebook
特别说明
关于 global, local 和 shell 三个命令的优先级
这 3 个命令的优先级是指同时设置了 global, local 和 shell 的版本,优先使用哪个设置
shell > local > global
即,优先使用 shell 指定的 python 版本,然后是看当前目录中是否设置了 python 版本,最后才是使用 global 中设置的 python 版本。
用 pyenv 安装 python 版本的时候,避免重复下载
用下面的一键安装脚本,通过国内 python 源码镜像安装
export v=3.7.11
wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/
pyenv install $v
其中
~/.pyenv/cache
是pyenv 的缓存目录,如果不存在,可以自己手动创建一个https://npm.taobao.org/mirrors/python/
是比较推荐的国内 python 源码源,比较遗憾的是,这个源中,没有其它 python 衍生版本的镜像,比如 pypy, cython 等。
自动激活和退出虚拟环境
在需要使用虚拟环境的目录(通常是项目目录)中:
- 建立一个
.python-version
的文本文件 - 将虚拟环境名称(如
notebook
)写在里面
之后每次进/出该目录时,虚拟环境都将自动激活/退出。
使用 pyenv virtualenv 的一些技巧
- 安装好的版本不做任何修改,我们只操作虚拟环境,如
notebook
- 可以通过版本来多个虚拟环境,如
notebook_1
、notebook_2
- 导出当前环境的依赖库:
pip freeze > requirements.txt
- 导入依赖库到当前环境:
pip install -r requirements.txt
其它
喜欢像我一样瞎折腾的朋友,也可以按照下面的参考链接中
- Oh My Zsh + Tmux + vim配置安装
- 是时候提高工作效率了:oh-my-zsh 与 tmux 的组合
这两篇文档,配置和优化 shell 环境中的工具集。
参考
如何在Ubuntu 20.04上安装Pyenv
Mac上pyenv的安装与使用
Pyenv 的安装配置与国内镜像加速
Python pyenv install 下载安装慢(失败)完美解决
Python 虚拟环境 Virtualenv 详解
理解Python虚拟环境
解决 MAC OS 使用 zsh 终端不能显示 virtualenv 相关提示的问题
ubuntu 20 换源
Oh My Zsh + Tmux + vim配置安装
是时候提高工作效率了:oh-my-zsh 与 tmux 的组合