树莓派简单教程(二)(中)

1.4.4 anaconda
如果对机器学习领域有兴趣,也可下载anaconda学习,建议装在c盘并预留足够空间
anaconda将所有的科学计算包,以及python本身通过conda进行管理,其中还包括TensorFlow,spyder(类比matlab)等架构,适用于机器学习,数据分析等。
至此,我们讨论完了几种常见的pythonIDE及架构,现在回到正题,谈论路径本身。
从1.4.4中可以得出,conda通过管理python来切换版本,这可以让人联想回linux系统本身。
1.4.5 路径和linux命令
(1)文件处理
路径可以分为两类:绝对路径和相对路径,假设led.py位于/home/pi/led.py,echo.py位于/home/pi/led/echo.py,那么led的绝对路径就是:/home/pi/led.py,即文件在硬盘上真正存在的路径。相对路径则代表相对于自己目标文件的位置,例如从文件架构可以看出,echo.py位于led.py的下一层,那么我们可以得出结论,echo.py相对于led.py的相对路径为:…/led/echo.py,这里我们可以看到出现了两个点,这两个点代表的既是该文件的上一层目录,总结如下:
… 代表上一层目录
/代表根目录
.代表目前所在的目录
那么在linux命令中应当如何找到文件?这里需要一些基本操作:
前文可知,运行python文件时,应当输入(python)python3 文件名.py,才可运行。但当我们直接打开命令行时,一般默认位于/home/pi根目录,我们又应当如何运行呢?
一种方法是,找到py文件对应的文件夹,在文件夹中打开命令行,这时默认目录为文件夹目录,只需要直接输入运行命令即可,还有一种方法便是通过命令进入文件夹。命令如下:
假设我们要运行echo.py,但我们忘记了在哪个文件夹中,即可首先输入:
ls -l
这时会显示若干个文件夹,而我们想起来了文件位于led内
输入cd led
我们成功进入了文件夹,最后输入 ls -l
我们便找到了echo.py
此时便可运行 python3 echo.py
完成任务
当我们发现不在这个文件夹中时,则输入cd …退回上一个文件夹
继续寻找即可

下文则为一些常用的命令:
Reboot 重启
shutdown -h now 关闭系统(建议使用命令或者点击桌面关闭系统)
logout 注销
cd 切换命令(配合相对路径使用)
ls 查看目录中的文件
ls -a 显示详细文件
mkdir 创建目录或文件
rm -f 删除文件
mv a b 将a文件重命名/移动 至b
cp a b 复制一个文件
cp -a a b 复制一个目录
cp -a a 将a复制到当前工作目录
cp -a /* 复制一个目录下的所有文件到当前目录,此时可以看出为根目录(不要输这句,搞破坏无所谓)
gzip a 压缩a
rar a b.rar 创建一个名为b.rar的包
unrar a 解压a
nano 编辑文件

(2)权限管理
由前文我们可以得出,树莓派系统中至少拥有一个管理员用户root和一个普通用户pi
在开发过程中,我们尽量建议通过root进行操作(比如filezilla以及vnc连接所需要的用户)
但在部分情况下,树莓派一般是以普通用户的形式直接登陆,我们又应当怎么处理?
部分教程中提出修改一个配置文件lightdm.conf,这里建议新手在使用时尽量少直接修改conf文件, 可以通过以下方式操作:命令行输入sudo raspi-config,打开可视化配置界面进行修改,如果遇到无法操作的地方在考虑修改conf文件,例如接下来会提到的wifi和分辨率问题
这里建议,除非有特殊需要,否则为了安全还是建议输入密码操作。
我们在这里会遇到一个问题,运行某些文件时,或者下载文件时,会出现权限不够的情况,这时可以选择切换用户:
sudo su 切换为超级用户
sudo pi 切换为普通用户
但如果我们的程序仅仅只需要在某条命令使用管理员权限,其他时候还是使用普通用户权限时应当如何做呢?
这时有人会选择两次切换,但为了安全,我们一般直接对该命令前面加sudo,sudo是增加用户权限,相当于以root运行这条命令。
这时候又有新的问题产生了,如何直接判断自己是不是管理员用户呢?
在使用命令行时,建议直接判断,如果$为普通用户,如果#为超级用户
但如果运行脚本呢?使用sudo。
有些时候会发现,在下载以及运行时,sudo似乎可以解决一切问题,但这也存在着两个风险:
第一、sudo rm -rf /* 这个命令删除所有文件包括操作系统本身
第二、sudo操作的文件其他普通用户组无法使用,即权限混乱
因此,sudo相较于切换用户安全,但并不是绝对安全。而这种权限混乱最容易出现在下载库的时候,即pip下载发现无法下载成功,用sudo却成功了但文件无法调用,或者你的某个文件属于管理员权限,但是脚本只是普通用户,于是你又得在原本运行文件的代码或者脚本中添加sudo。

(3)库的下载和各种资源管理器
前文对下载库的源做出了解释,这里主要说明各种下载管理
pip 前文提到,可以下载python的库,并选择各种版本
apt-get 可以用来安装软件,更新源,但只能安装单一版本,无法选择
简而言之,一个是系统级(apt-get),一个是编程语言级别(pip),这与之前conda又有所不同(连python也作为对象管理)
在部分项目或者库的升级中,常常会出现这样一道命令 pip install -r requirements.txt
requirement文件记录了所有依赖包以及精确的版本号,便于打包项目依赖环境,点击进去后会发现这个文件实质记载了需要的库,例如pandas=1.7.0,这与初学者所想象的不同,这并不是数个包的集合。requirement的生成命令如下:
Pip freeze >requirements.txt
从这里我们可以学习到一点,在处理依赖环境时,同编程一样,通过一个全局变量来决定程序的输入,而不用大范围修改程序内部,这也体现在一些人工智能项目中,通过yml记录接口,用户根据选择挑选或者程序在调用接口失败时自动选择备用接口,本质上是yml而非程序的改变(和调整分辨率,连接wifi相同,在后文进行操作后可以访问对应的conf文件夹,可以发现这一点)

1.4.6 打包
有没有什么方法能够将python文件直接点击运行,而不是要输入python呢?
这里有两个方法:1、写脚本,这个会在(下)讲
2、打包,打包成exe文件
pyinstaller可以讲python文件打包成一个exe文件,但同pandas等一样,需要通过pip命令安装。
在安装成功后,通过命令行进入所需要打包的python项目目录下,输入
pyinstaller - F led.py
执行命令后,可以看到详细过程,最终在此目录的dist目录下会生成一个led.exe文件,打包完成。
打包成功后,进入命令行直接输入文件路径,我们可以看到它直接运行而不需要python。该库在mac系统中也可使用(直接生成一个名叫led的文件)
但在部分情况下,点击打包文件会报错,显示该文件出现缺少第三方库。这时只需要将代码修改:
假设led.py文件调用了一个sklearn库中的方法并未打包成功,那么将代码可以修改为:
Pyinstaller -F led.py -p 需要的库的绝对路径,通过命令行运行打包生成的exe文件检查缺少的库,逐步补充即可。
即然打包出来了一个exe文件,那么就需要考虑到文件的可移植性。
而pyinstaller库的默认方法为:
pyinstaller -D led.py 与前面只生成一个exe文件不同,这个方法生成的exe文件远小于前者,它包含了多个依赖。
而前文也提到了相对路径和绝对路径两者,我们要考虑到程序在其他用户电脑里的可行性,就要考虑路径,避免出现在开发者电脑可以使用,但在其他电脑就失败的情况。

当然不可忽略的是,在使用pyinstaller的过程中往往会发现打包过程太长,exe打开很久等不可忽视的缺点,所以我觉得这个程序打包一些较小的python文件即可,比如一个俄罗斯方块之类的小游戏。因为其本质上只是帮助用户减少电脑系统部署的改变。
在只有print和input方法的python程序中,打包出来的exe文件仅仅只有一个命令行可供输入输出显示。而如何美化它?这就需要tkinter,pyqt5等一些开发跨平台的图形界面库了(我打包出来的基本只是自己用所以命令行就命令行吧,不过也顺道提一嘴,而且在使用opencv时也有内置方法,所以不算深入,我也只学过一点点的c#)
至此,关于python编程的部分告一段落,回到树莓派及linux系统本身,在(二)(下)我们开始讲下脚本及vim编辑器

备注:如果在编程时经常发现哪儿出了问题,没准是变量重新定义了,或者输入法切换错了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值