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

使用香橙派 在Linux环境中安装并学习Python

前言

在实际项目中,经常会遇到需要使用人工智能的场景,如人脸识别,车牌识别等...其一般的流程就是由单片机采集数据发送给提供人工智能算法模型的公司(百度云,阿里云...),然后人工智能将结果回传给单片机,单片机根据结果来对应的操作。

而人工智能的代码普遍要使用python而不是C,所以将数据发给人工智能以及从人工智能拿回数据时,需要涉及到如何在C中使用Python的知识

综上所述,Python是作为一名合格的嵌入式工程师所必备的技能之一,本节就开始学习Python,主要的学习目标是:用C语言的视角学习python基本概念,学习C语言的Python接口

(PS:其实我的研究生第一学期也学习了Python,不过已经过去了一段时间,所以这节也可以视为复习课吧)

Python的安装和环境搭建

查看当前python版本:

python --version

 

由于之后图像识别使用低版本python可能会不支持,所以现在需要将python升级到3.9 

更新apt:

sudo apt update

安装编译Python需要用到的环境:

sudo apt install -y build-essential zlib1g-dev \
libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
libreadline-dev libffi-dev curl libbz2-dev

 正式下载Python源码:

wget \
https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz

解压源码包:

tar xvf Python-3.9.10.tgz

配置安装选项: 

1. cd Python-3.9.10/
2. ./configure --enable-optimizations

编译:(35min左右)

make -j4 //j4代表四核全速

正式安装:

sudo make install

 执行完以上的所有步骤,Python3.9就被成功的安装在了/usr/local/bin下!

建立软连接:

其实在local/bin下有很多版本的python,所以为了使得python指令可以准确的知道我要使用的是3.9版本的python,软连接的建立是十分必要的。

执行“ls /usr/bin/python -l”:

可见,现在的软链接指向的是/usr/bin/python2.7

执行“python --version”:

也还是python2.7

所以的确需要修改:

sudo rm -f /usr/bin/python //删除原来的软连接
sudo ln -s /usr/local/bin/python3.9 /usr/bin/python // 在/usr/bin/目录创建软连接python,定向/usr/local/bin/python3.9
python --version //检查python版本是否是3.9

软连接成功!!

更新pip & 更新源

Linux 系统 pip 默认使用的源为 Python 官方的源, 但是国内访问 Python 官方的源速度是很慢的, 并且经常会由于网络原因导致 Python 软件包安装失败。 所以在使用 pip 安装 Python 库时, 需要换 pip 源,但是我目前现在在加拿大,所以我暂时没有更新源

python环境的pip 类似于 C语言的apt-get,从服务器获得python开发用的第三方包

//更新pip
sudo apt install -y python-pip python3-pip 
//更新源
mkdir -p ~/.pip //建立pip工作文件夹
vim ~/.pip/pip.conf //添加pip服务器配置文件
//文件内容如下:
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn]

 至此,python环境的安装正式完成!

输入" python "就可以进入python3.9的指令行模式了:

Python的学习

参考:(写的很好,不懂就去这里面找

Python十分钟入门 | 菜鸟教程

Python pass 语句 | 菜鸟教程

Python是一种动态解释型的编程语言,Python可以在Windows、UNIX、MAC等多种操作系统上 使用,也可以在Java、.NET开发平台上使用。

Python的特点

  • Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。
  • Python具有很强的面向对象特性,而且简化了面向对象的实现。它消除了保护类型、抽象类、接口等面向对象的元素。
  • Python代码块使用空格或制表符缩进的方式分隔代码。
  • Python仅有31个保留字,而且没有分号、begin、end等标记。
  • Python是强类型语言,变量创建后会对应一种数据类型,出现在统一表达式中的不同类型的变量需要做类型转换。

编写并运行一个python程序 

创建一个“mjm_python”文件夹,在文件夹内创建一个“demo1.py”:(其实linux系统不是很关心文件的后缀名,py也行,其他也行,但是为了格式还是写成py最好)

demo1.py:

print("linux C python")

保存退出后,输入“python demo1.py” 即可运行程序:

  • 而如果在 demo1.py 的开头就指定解释器:
#! /usr/bin/pythonprint("linux C python")
  • 并使用“chmod +x demo1.py”来赋予执行权限;

那么直接执行“./demo1.py”就可以运行程序:

如果开头加上“# -* - coding: UTF-8 -* -” 则可以支持中文显示,所以py文件的开头就默认写这两句话:

#! /usr/bin/python
# -* - coding: UTF-8 -* -

输入输出变量

  • 输出就是刚刚演示的print函数,注意print函数会自动在打印后加上换行符;
  • 获取用户输入则使用input函数
input.py:
#! /usr/bin/python
# -* - coding: UTF-8 -* -s = input("输入内容,按下ENTER结束\n")for i in s:print(i)

 

注意,input返回的永远都是字符串,所以如果想要给 整数或者浮点数 等不是字符串的变量 赋值时,需要进行强转:a = int(a)

流程控制

  • python不支持自增运算符和自减运算符。例如i++/i-是错误的,但i+=1是可以的。
  • 1/2在python2.5之前会等于0.5,在python2.5之后会等于0。
  • 不等于为!=或<>
  • 等于用==表示
  • 逻辑表达式中and表示逻辑与,or表示逻辑或,not表示逻辑非
if/else:
if (表达式) :语句1
elif (表达式) :语句2
…
elif (表达式) :语句n
else :语句m
for:
for 变量 in 集合 :…
else : #一般不用…
while:
while(表达式) :…
else : #一般不用…

列表&元组&字典

列表List:
  • 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
  • Python有6个序列的内置类型,但最常见的是列表和元组。
  • 序列都可以进行的操作包括索引,切片,加,乘,检查成员。
  • 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
  • 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
  • 列表的数据项不需要具有相同的类型
list.py:
#! /usr/bin/python
# -* - coding: UTF-8 -* -list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])list1.append('Google')   ## 使用 append() 添加元素
list2.append(8)
print(list1)
print(list2)del list1[2]  ##使用del命令删除list
print(list1)

 

元组Tuple:
  • Python 的元组与列表类似,不同之处在于元组的元素不能修改
  • 元组使用小括号,列表使用方括号
  • 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可
tuple.py:
#! /usr/bin/python
# -* - coding: UTF-8 -* -tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )print("tup1[0]: ", tup1[0])
print("tup2[1:5]: ", tup2[1:5])# 以下修改元组元素操作是非法的。
# tup2[0] = 100# 创建一个新的元组
tup3 = tup1 + tup2
print(tup3)del tup #删除元组
print("after delete:")
print(tup3)

 

字典Dictionary:
  • 字典是另一种可变容器模型,且可存储任意类型对象
  • 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式:d = {key1 : value1, key2 : value2 }
  • dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict
  • 键(key)一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一
  • 值(value)可以取任何数据类型,但键(key)必须是不可变的,如字符串,数字或元组

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象

  • 字典值(value)可以没有限制地取任何 python 对象,既可以是标准的对象,也可以是用户定义的,但键(key)不行
dict.py:
#! /usr/bin/python
# -* - coding: UTF-8 -*tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print("tinydict['Name']: ", tinydict['Name'])
print("tinydict['Age']: ", tinydict['Age'])## print("tinydict['Alice']: ", tinydict['Alice']) #由于没有名为Alice的key,所以这句会报错tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 添加
print("tinydict['Age']: ", tinydict['Age'])
print("tinydict['School']: ", tinydict['School'])del tinydict['Name']  # 删除键是'Name'的条目
tinydict.clear()      # 清空字典所有条目
del tinydict          # 删除字典

 

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义一个由自己想要功能的函数,以下是简单的规则

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
def functionname( parameters ):"函数_文档字符串"function_suitereturn [expression]
func.py: 
#!/usr/bin/python
# -*- coding: UTF-8 -*-# 定义函数
def printme( str ):#"打印任何传入的字符串"print(str)return# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

模块

support.py:(作为一个模块)
def print_func( par ):print("Hello : ", par)return
demo2.py:(调用support模块)
#!/usr/bin/python
# -*- coding: UTF-8 -*-# 导入模块
import support
#也可以 import print_func from support# 现在可以调用模块里包含的函数了
support.print_func("Runoob")
#这里可以直接写成print_func("Runoob") 如果刚刚写成import print_func from support

文件

file.py:
#!/usr/bin/python
# -*- coding: UTF-8 -*-# 打开一个文件,只写,且文件不存在就创建
fo = open("foo.txt", "w")
#写内容
fo.write( "mjm! Very good!\n")
# 关闭打开的文件
fo.close# 打开一个文件,读写
fo = open("foo.txt", "r+")
#读内容
str = fo.read(20)
print("读取的字符串是 : ", str)# 查找当前位置
position = fo.tell()
print("当前文件位置 : ", position)# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(20)
print("重新读取字符串 : ", str)
# 关闭打开的文件
fo.close()

为什么不直接用r+读写打开之后直接写?

因为foo.txt不存在,而r+不支持创建文件,所以可以先使用w只写打开,w支持“如果文件不存在就创建” 

 

相关文章:

使用香橙派 在Linux环境中安装并学习Python

前言 在实际项目中&#xff0c;经常会遇到需要使用人工智能的场景&#xff0c;如人脸识别&#xff0c;车牌识别等...其一般的流程就是由单片机采集数据发送给提供人工智能算法模型的公司&#xff08;百度云&#xff0c;阿里云...&#xff09;&#xff0c;然后人工智能将结果回…...

如何开发物联网 APP?

如何开发物联网 APP? 这个问题本身是不严谨的&#xff0c;APP只是手机端的一个控制或者用于显示的人机交互页面&#xff0c;物联网是通过传感器&#xff0c;物联网卡等模块把物体接入网络以方便远程监控或者控制等。 你问的应该是怎么开发出来一个远程控制物体的APP吧&#x…...

配置pytorchGPU虚拟环境-python3.7

cuda版本的pytorch包下载地址戳这里 winR->输入cmd->输nvcc -V回车 cuda 11.0 输入以下命令来查找 CUDA 的安装路径&#xff1a; Windows: where nvcc 输入以下命令来查找 cuDNN 的版本号&#xff1a; Windows: where cudnn* cuDNN 8.0 本机安装的是cuda 11.0&…...

Logic Pro X10.7.9(mac乐曲制作软件)

Logic Pro X是由苹果公司开发的一款专业音频制作软件&#xff0c;主要用于音乐制作、录音、混音和母带处理等方面。以下是Logic Pro X的特点&#xff1a; 强大的音频编辑功能&#xff1a;Logic Pro X提供了丰富的音频编辑工具&#xff0c;包括波形编辑器、音频自动化、时间拉伸…...

第一部分:HTML5

目录 一&#xff1a;网页 1.1&#xff1a;什么是网页&#xff1f; 1.2&#xff1a;什么是HTML&#xff1f; 1.3&#xff1a;网页的形成 二&#xff1a;常用浏览器 三&#xff1a;Web标准 3.1&#xff1a;为什么需要Web标准&#xff1f; 3.2&#xff1a;Web标准的构成 四&a…...

Linux 基础入门

目录 一、计算机 1、组成 2、功能 二、操作系统 1、定义 2、主要工作 3、操作系统内核功能 4、常见的操作系统 三、Linux的组成 四、搭建Linux学习环境 五、安装远程连接Linux的软件 1、安装xshell 2、安装mobaxterm 六、Linux操作系统学习大纲 一、计算机 1、组…...

【数据结构】插入排序:直接插入排序、折半插入排序、希尔排序的学习知识总结

目录 1、排序的基本概念 2、直接插入排序 2.1 算法思想 2.2 代码实现 3、折半插入排序 3.1 算法思想 3.2 代码实现 4、希尔排序 4.1 算法思想 4..2 代码实现 1、排序的基本概念 排序是将一组数据按照预定的顺序排列的过程&#xff0c;排序的基本概念包括以下内容…...

Magic Battery for Mac:让你的设备电量管理变得轻松简单

Mac电脑用户们&#xff0c;你们是否曾经为了给设备充电而感到烦恼&#xff1f;是否希望能够方便地查看连接设备的电量情况&#xff1f;现在&#xff0c;有了Magic Battery for macOS&#xff0c;这些问题都将成为过去&#xff01; Magic Battery是一个实用的应用程序&#xff…...

nodejs+vue大学食堂订餐系统elementui

可以查看会员信息&#xff0c;录入新的会员信息&#xff0c;对会员的信息进行管理。 网站管理模块对整个网站中的信息进行管理&#xff0c;可以查看会员留在留言栏中的信息&#xff0c;设置网站中的参数等。用户管理模块主要实现用户添加、用户修改、用户删除等功能。 近年来&…...

nat综合实验

路漫漫其修远兮,吾将上下而求索。 实验目的如图 实验思路&#xff1a;配置内网&#xff0c;再配置外网&#xff0c;再做nat clien1配置 clien2配置 pc3配置 lsw1配置 sysname lsw1 # vlan batch 10 20 30 # interface MEth0/0/1 # interface Eth-Trunk1port link-type trunkp…...

【iOS逆向与安全】好用的一套 TCP 类

初始化 //页面 %hook xxxxxxxViewController//- (void)viewWillAppear:(BOOL)animated{ //NSLog("View Will Appear&#xff0c;再次进入刷新"); - (void)viewDidLoad{//启动tcp[[Xddtcp sharedTcpManager] connectServer] ;} 发送数据 //发送数据 [[Xddtcp shared…...

Ubuntu Kafka开机自启动服务

1、创建service文件 在/lib/systemd/system目录下创建kafka.service文件 [Unit] DescriptionApache Kafka Server Documentationhttp://kafka.apache.org/documentation.html Requireszookeeper.service[Service] Typesimple Environment"JAVA_HOME/usr/local/programs/j…...

c#实现单例模式的两种方法(饿汉式、懒汉式)

在C#中&#xff0c;可以使用以下几种方式来实现单例模式&#xff1a; 饿汉式单例模式&#xff08;Eager Singleton&#xff09;&#xff1a; 在类加载时就创建实例。私有化构造函数&#xff0c;防止外部实例化。提供一个静态的只读属性来获取实例。代码示例&#xff1a; // 在C…...

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…...

centos7 添加网卡设置动态ip,修改网卡为任意名称

centos7 添加网卡并设置动态ip&#xff0c;重命名为任意名称 本文记录如何在centos环境上增加两个网卡&#xff0c;并设置为动态获取ip&#xff0c;以及修改网卡名称为任意名称 1、centos7添加两个网卡动态获取ip 1.1 vmvare上添加网络适配器 1、关闭虚拟机 2、 添加网络适…...

计算机竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…...

nvm安装后node或npm不是内部或外部命令

nvm安装后出现node或npm不是内部或外部命令 进行以下步骤解决 找到nvm安装所在位置&#xff0c;新建一个空的nodejs文件夹 打开 windowr —> sysdm.cpl —> 高级 —>环境变量 将下图中两个位置的地址改成刚刚新建的nodejs空文件夹所在的位置 nvm安装后都是会自动添加…...

Kafka数据可靠性保证

1.生产者发送数据到Topic partition的可靠性保证 为保证producer发送的数据&#xff0c;能可靠的发送到指定的topic&#xff0c;topic的每个partition收到producer发送的数据后&#xff0c;都需要向producer发送ack&#xff08;acknowledgement确认收到&#xff09;&#xff0c…...

基于R的linkET包qcorrplot可视化Mantel test相关性网络热图分析correlation heatmap

写在前面 需求是对瘤胃宏基因组结果鉴定到的差异菌株与表观指标、瘤胃代谢组、血清代谢组、牛奶代谢组中有差异的部分进行关联分析&#xff0c;效果图如下&#xff1a; 数据准备 逗号分隔的csv格式文件&#xff0c;两个表格&#xff0c;一个是每个样本对应的表观指标数据&…...

IOTDB的TsFile底层设计

目录 概述 数据模型 数据结构 元数据注册 读取和写入 设计思想 主要过程...

MATLAB算法实战应用案例精讲-【人工智能】边缘计算(补充篇)

目录 前言 算法原理 传统边缘检测算子 构建通用的边缘检测算子 图...

Linux学习-HIS系统部署(1)

Git安装 #安装中文支持&#xff08;选做&#xff09; [rootProgramer ~]# echo $LANG #查看当前系统语言及编码 en_US.UTF-8 [rootProgramer ~]# yum -y install langpacks-zh_CN.noarch #安装中文支持 [rootProgramer ~]# vim /etc/locale.co…...

Cairo介绍及源码构建安装(3)

接前一篇文章&#xff1a;Cairo介绍及源码构建安装&#xff08;2&#xff09; 四、Cairo构建与安装 2. 配置 BLFS中给出的命令为&#xff1a; ./configure --prefix/usr \--disable-static \--enable-tee 这里将“--prefix”选项由“/usr”调整为“/usr/local”&#x…...

Mac电脑信息大纲记录软件 OmniOutliner 5 Pro for Mac中文

OmniOutliner 5 Pro是一款专业级的Mac大纲制作工具&#xff0c;它可以帮助用户更好地组织和管理信息&#xff0c;以及制作精美的大纲。以下是OmniOutliner 5 Pro的主要功能和特点&#xff1a; 强大的大纲组织和管理功能。OmniOutliner 5 Pro为用户提供了多层次的大纲结构&…...

linux设置应用开机自启(通用:mysql、jar、nginx、solr...)

1. 业务场景 用于单机生产环境&#xff0c;防止服务器断电或者强制重启导致的服务下线。 2. 实现方案 对于无状态服务&#xff0c;可容器部署设置 restart: always&#xff0c;systemctl eable docker对于有状态服务&#xff0c;可编写自启脚本&#xff0c;如下 ① 编写执行…...

Offset Explorer(Kafka消息可视化工具)报invalid hex digit ‘{‘错误解决方法

解决办法&#xff1a; 根据代码的实际情况&#xff0c;设置成对应的值。设置完成后点update、refresh更新。...

深度学习:模型训练过程中Trying to backward through the graph a second time解决方案

1 问题描述 在训练lstm网络过程中出现如下错误&#xff1a; Traceback (most recent call last):File "D:\code\lstm_emotion_analyse\text_analyse.py", line 82, in <module>loss.backward()File "C:\Users\lishu\anaconda3\envs\pt2\lib\site-packag…...

【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现

目录 一、非线性方程式求根 1、二分法&#xff08;Bisection Method、对分法&#xff09; a. 理论简介 b. python实现 2、迭代法&#xff08;Iterative Method&#xff09; a. 理论简介 b. python实现 3、Newton 迭代法&#xff08;Newtons Method&#xff09; a. 理论…...

linux主机名

title: linux主机名 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: Linux系统的主机名 查询主机名 hostnamehostnamectl 修改主机名 hostnamectl set-hostname <newhostname>...

前端uniapp图片select联动文本切换

图片 代码 <template><!-- 这个是uniapp的下拉框 --><uni-data-select v-model"pay_type" :localdata"range" change"handleSelectChange"></uni-data-select><!-- 图片 --><image :src"dynamicImage&qu…...

做网站主页效果图/网站权重等级

SR-IOV特性&#xff1a;能减少宿主机的CPU使用率&#xff0c;需要物理网卡支持该功能&#xff0c;并且有的主板需要开启VT-d功能&#xff0c;有的主板有单独的开启开关&#xff0c;如下图Dell R630基础环境准备&#xff1a;物理网卡:intel I350 ,系统环境&#xff1a;centos7.5…...

主流网站开发语言有哪些/网站seo的方法

windows下Sublime Text3 java开发环境的配置:1.编写批处理脚本run.bat放在jdk的bin目录下,例如我的就放在"D:\Java\bin".runbat内容:开始(本行不复制)ECHO OFFcd %~dp1ECHO Compiling %~nx1.......IF EXIST %~n1.class (DEL %~n1.class)javac -encoding UTF-8 %~nx1I…...

专业科技网站建设/资源网站优化排名优化

文章目录说明demo参考author: ningan123 date: 2023-03-21 11:05 updated: 2023-03-21 11:09 说明 官方文档对 WaitGroup 的描述是&#xff1a;一个 WaitGroup 对象可以等待一组协程结束。使用方法是&#xff1a; main 协程通过调用 wg.Add(delta int) 设置 worker 协程的个…...

阿里云可以做哪些网站吗/seo优化公司

Servlet最主要作用就是处理客户端请求并作出回应&#xff0c;为此&#xff0c;针对每次请求&#xff0c;Web容器在调用service()之前都会创建两个对象&#xff0c;分别是HttpServletRequest和HttpServletResponse。其中HttpServletRequest封装HTTP请求消息&#xff0c;HttpServ…...

泰州网站建设方案推广/电商网站订烟

质数又称素数。指在一个大于1的自然数中&#xff0c;除了1和此整数自身外&#xff0c;没法被其他自然数整除的数。或在所有比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数或素数。 换句话说&#xff0c;只有两个正因数&#xff08;1和自己&#xff09;的自然…...

可以做淘宝联盟的免费网站/百度官方网站网址

元强化学习(meta reinforcement learning)是指使用强化学习解决多种不同的任务的方法。在机器人领域&#xff0c;元强化学习可用于控制机器人执行多种不同的任务。例如&#xff0c;可以使用元强化学习训练机器人执行视觉检测、自主导航、机械手操作等任务。 元强化学习的优点在…...