运维开发宝典037-Python环境安装和变量1

运维开发宝典037-Python环境安装和变量1 大家好我是云计算磊哥从业20年的IT老鸟。IT架构师培训15年总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文手把手从安装软件讲起从linux系统管理shell脚本编程mysql运维架构备份核心技术Apache/nginx/tomcatWEB服务器管理ansible自动化运维redis集群哨兵LVM/HAproxy/keepalived集群架构rabbitMQ消息队列dockerK8S集群资源管理K8S自愈K8S自动扩容PYTHON编程基础PYTHON自动化运维从行业到产品从过去到未来从理论到操作从视频到文档工具100篇系列文章一站式发布。从零基础入门到30k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续AI大模型开发课程更精彩。一、Python 语言介绍1、Python 发展历史Python 是由 Guido van Rossum 吉多·范罗苏姆在八十年代末和九十年代初在荷兰国家数学和计算机科学研究所设计出来的。Python 本身也是由诸多其他语言发展而来的,这包括 ABC、lisp、perl、C、C、Unix shell 和其他的脚本语言等等。像 Perl 语言一样Python 源代码同样遵循 GPL(GNU General Public License)协议。现在 Python 是由一个核心开发团队在维护Guido van Rossum吉多·范罗苏姆 仍然占据着至关重要的作用指导其进展。2、Python 简介Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性相比其他语言经常使用英文关键字其他语言的一些标点符号它具有比其他语言更有特色语法结构Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于1989年底发明第一个公开发行版发行于1991年。像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议。3、Python 特点**1.易于学习**Python有相对较少的关键字结构简单和一个明确定义的语法学习起来更加简单。**2.易于阅读**Python代码定义的更清晰。**3.易于维护**Python的成功在于它的源代码是相当容易维护的。**4.一个广泛的标准库**Python的最大的优势之一是丰富的库跨平台的在UNIXWindows和Macintosh兼容很好。**5.互动模式**互动模式的支持您可以从终端输入执行代码并获得结果的语言互动的测试和调试代码片断。**6.可移植**基于其开放源代码的特性Python已经被移植也就是使其工作到许多平台。**7.可扩展**如果你需要一段运行很快的关键代码或者是想要编写一些不愿开放的算法你可以使用C或C完成那部分程序然后从你的Python程序中调用。**8.数据库**Python提供所有主要的商业数据库的接口。**9.GUI编程**Python支持GUI可以创建和移植到许多系统调用。10.可嵌入:你可以将Python嵌入到C/C程序让你的程序的用户获得脚本化的能力。4、Python 的能力2026年最新的TIOBE排行榜显示Python 排行在第1位。编程语言TIOBE排行榜Python可以应用于众多领域如数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python如Youtube、Dropbox、BT、Quora中国知乎、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有自动化运维、自动化测试、大数据分析、爬虫、Web 等。二、Linux 编译安装Python31、源码安装1、安装依赖软件包yum-yinstallgcc gcc-c zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel libffi-devel# python3.10版本安装前提条件是你的系统已经安装了开发工具包。2、下载curl-opython3.10.5.tgz https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz // 或者wgethttps://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz3、解压安装tar-xfPython-3.10.5.tgzcdPython-3.10.5/进入目录后执行下面的命令修改文件Python-3.10.5/Modules/Setup.dist 去掉如下几行的注释 readline readline.c-lreadline-ltermcapSSL/usr/local/ssl _ssl _ssl.c\-DUSE_SSL-I$(SSL)/include -I$(SSL)/include/openssl\-L$(SSL)/lib-lssl-lcrypto或者在shell命令提示符下执行如下命令sed-ris/^#readline/readline/Modules/Setup.distsed-ris/^#(SSL)/\1/Modules/Setup.distsed-ris/^#(_ssl)/\1/Modules/Setup.distsed-ris/^#([\t]*-DUSE)/\1/Modules/Setup.distsed-ris/^#([\t]*-L\$\(SSL\))/\1/Modules/Setup.dist开始编译安装./configure --enable-shared--prefix/usr/local/python3make-j2makeinstall–enable-shared 指定安装共享库共享库在使用其他需调用python的软件时会用到比如使用mod_wgsi连接Apache与python时需要。4、配置共享库文件为所有用户设置共享库目录用 vim 编辑器打开配置文件/etc/profile.d/python3.shvim/etc/profile.d/python3.sh在文件末尾写上如下内容# python3.10 共享库目录exportPATH$PATH:/usr/local/python3/bin编辑文件/etc/ld.so.conf.d/python3.conf并且添加如下内容/usr/local/python3/lib保存退出文件后 执行如下命令 加载配置信息使其生效ldconfig执行如下命令使环境变量生效source/etc/profile.d/python3.sh5、测试python3$ python3 Python3.10.3(default,Dec172017,04:11:01)[GCC4.8.520150623(Red Hat4.8.5-11)]on linux Typehelp,copyright,creditsorlicenseformore information.print(qf)qfexit()输入exit()即可退出 python36、测试 pip3一般情况下你不需要执行下面的安装命令。[rootlocalhost ~]# pip3 -Vpip9.0.3 from /usr/local/lib/python3.10/site-packages(python3.10)假如上面显示的含有 python3.10 就没问题了说名 pip3 安装的模块会安装到上面显示的目录下2、 配置使用国内源安装第三方模块1、创建配置文件配置 pip3 使用国内源mkdir~/.pipvi~/.pip/pip.conf# Windows 下使用 pip.ini(1):在windows文件管理器中,输入 %APPDATA%(2):会定位到一个新的目录下在该目录下新建pip文件夹然后到pip文件夹里面去新建个pip.ini文件写入如下内容[global]timeout6000index-urlhttps://mirrors.aliyun.com/pypi/simple豆瓣源: https://pypi.douban.com/simple/阿里源: https://mirrors.aliyun.com/pypi/simple清华: https://pypi.tuna.tsinghua.edu.cn/simple阿里云: http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学: http://pypi.hustunique.com/山东理工大学: http://pypi.sdutlinux.org/示例比如安装一个执行远程主机命令的模块[rootlocalhost ~]# pip3 install gnureadlineLookinginindexes: https://mirrors.aliyun.com/pypi/simple Collecting gnureadline Downloading https://mirrors.aliyun.com/pypi/packages/2b/36/60b53a1793af9a60539b5ee6fed4f3702280bd5a88ab41600a51510002a1/gnureadline-8.0.0-cp37-cp37m-manylinux1_x86_64.whl(283kB)100%|████████████████████████████████|286kB 387kB/s Installing collected packages: gnureadline Successfully installed gnureadline-8.0.0 You are using pip version19.0.3, however version19.3.1 is available. You should consider upgrading via thepip install --upgrade pipcommand.# 最后两行为警告内容无需理会三、Windows 10 安装 Python3 和 pip31、下载Python3下载地址https://www.python.org/downloads/windows/注意window版本有32位和64位这里我下载的是64位。如果自定义安装报错使用默认安装install now即可2、安装Python31、下载好安装包后双击安装默认下一步。只需要注意一件事。勾选 自动添加到path环境变量中。补充内容一我们操作代码的方式 终端 文件终端字符串需要用引号文件文件名以.py结尾解释器申明终端执行文件输入命令的执行流程属于代码–解释器—语法词法分析在 /root 目录下创建 hello.py 文件内容如下print(hello,world)执行 hello.py 文件即python /root/hello.py二、解释器上一步中执行 python3 /root/hello.py 时明确的指出 hello.py 脚本由 python 解释器来执行。如果想要类似于执行shell脚本一样执行python脚本例./hello.py那么就需要在 hello.py 文件的头部指定解释器如下#!/usr/bin/env python3print(hello,world)如此一来执行 ./hello.py即可。ps执行前需给予 hello.py 执行权限chmod 755 hello.py#!/usr/bin/env python3print(hello,世界)三、内容编码python解释器在加载 .py 文件中的代码时会对内容进行编码默认ascill ASCIIAmerican Standard Code for Information Interchange美国标准信息交换代码是基于拉丁字母的一套电脑编码系统主要用于显示现代英语和其他西欧语言其最多只能用 8 位来表示一个字节即2**8 256所以ASCII码最多只能表示 256 个符号。 显然ASCII码无法将世界上的各种文字和符号全部表示所以就需要新出一种可以代表所有字符和符号的编码即Unicode Unicode统一码、万国码、单一码是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的它为每种语言中的每个字符设定了统一并且唯一的二进制编码规定虽有的字符和符号最少由 16 位来表示2个字节即2 **16 65536 注此处说的的是最少2个字节可能更多 UTF-8是对Unicode编码的压缩和优化他不再使用最少使用2个字节而是将所有的字符和符号进行分类ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存东亚的字符用3个字节保存... 所以python解释器在加载 .py 文件中的代码时会对内容进行编码默认ascill如果是如下代码的话 报错ascii码无法表示中文四、注释Shell 注释方法单行注释 # 被注释内容多行注释: ! 备注释内容 !Python 注释方法单行注释# 被注释内容多行注释 被注释内容 五、执行脚本传入参数Python有大量的模块从而使得开发Python程序非常简洁。类库有包括三中Python内部提供的模块业内开源的模块程序员自己开发的模块温馨提示python的模块可以是c语言等Python内部提供一个 sys 的模块其中的 sys.argv 用来捕获执行执行python脚本时传入的参数#!/usr/bin/env python# -*- coding: utf-8 -*-importsysprint(sys.argv)六、 pyc 文件执行Python代码时如果导入了其他的 .py 文件那么执行过程中会自动生成一个与其同名的 .pyc 文件该文件就是Python解释器编译之后产生的字节码。https://www.jianshu.com/p/f0c6130f7b13ps代码经过编译可以产生字节码字节码通过反编译也可以得到代码。七、输入#!/usr/bin/env python # -*- coding: utf-8 -*- # 将用户输入的内容赋值给 name 变量 name input(请输入用户名) # 打印输入的内容 print(name)四、变量1、变量的声明python语言是动态语言变量不需要事先声明变量的类型不需要声明每个变量在使用前都必须赋值变量赋值以后该变量才会被创建。在 Python 中变量就是变量它没有类型我们所说的类型是变量所指的内存中对象的类型。等号用来给变量赋值。等号运算符左边是一个变量名,等号运算符右边是其指向的具体的值。a 1 a 千锋2、变量命名规则可以包含以下字符大小写字母a-z,A-Z变量名区分大小写; a 和 A 是不同的变量数字0-9下划线_不可以以数字开头3、变量命名潜规则不要以单下划线和双下划线开头如_user或 __user变量命名要易读如user_name,而不是username不用使用标准库中(内置)的模块名或者第三方的模块名不要用这些 Python 内置的关键字importkeywordkeyword.kwlist[False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with,yield]上面打印出来的数据在 Python 中被称为列表 列表是 Python中一种数据结构。关于数据结构后面的章节会详细说明。列表的都是 Python3 中的关键字。#可以使用一下方法验证返回 True 就是 Python 的关键字keyword.iskeyword(del)True4、变量赋值python 中使用等号对变量进行赋值,。等号左边被称为变量名等号右边称为变量的值确切的说是对象n55、Python 中的变量是什么在 python 中究竟该如何正确理解变量的赋值过程呢shello以上的变量赋值应该说成把变量分配给对象更合理。hello这个字符串对象会在内存中先被创建之后再把变量名s分配给这个对象。所以要理解 Python 中的变量赋值应该始终先看等号右边。对象是在右边先被创建或者被获取在此之后左边的变量名才会被绑定到对象上这就像为对象贴上了标签。变量名本质上是对象的标签或者说是对象的名字当然一个对象可以有多个标签或者名字。比如 张三 和 小张 指的都是同一个人请看下面的代码示例a1ba a2print(b)# b 会是 ?上面的b a我们称它为传递引用此时对象会拥有两个名称(标签) 分别是a和b6、变量的多元赋值在 Python3 中你可以这样给变量赋值In[2]:x,y,z1,2,3In[3]:x Out[3]:1In[4]:y Out[4]:2In[5]:z Out[5]:3当然也可以这样In[10]:a,b,cabcIn[11]:a Out[11]:aIn[12]:b Out[12]:bIn[13]:c Out[13]:c假如你需要对一个序列类型中的数据进行一一解开赋值那就需要等号左边的变量名和序列类型数据中的元素个数相同。这种多元赋值方式在 Python 中也可以称为元组解包。7、Python 中对象(变量的值)都有三个特性# 唯一标识是对象在内存中的整数表示形式在 CPython 中可以理解为# 内存地址# 可以用 id 这个函数查看id(10)# 直接给一个对象id(n)# 给你变量名# 类型 对象都有不同的类型用 type 这个函数查看type(10)type(n)# 值对象本身10五、运算符1、算数运算#!/usr/bin/python3a21b10c0cabprint(c 的值为,c)ca-bprint(c 的值为,c)ca*bprint(c 的值为,c)ca/bprint(c 的值为,c)ca%bprint(c 的值为,c)# 修改变量 a 、b 、ca2b3ca**bprint(c 的值为,c)a10b5ca//bprint(c 的值为,c)c 的值为31c 的值为11c 的值为210c 的值为2.1c 的值为1c 的值为8c 的值为22、比较运算赋值运算#!/usr/bin/python3a21b10c0if(ab):print(a 等于 b)else:print(a 不等于 b)if(a!b):print(a 不等于 b)else:print(a 等于 b)if(ab):print(a 小于 b)else:print(a 大于等于 b)if(ab):print(a 大于 b)else:print(小于等于 b)# 修改变量 a 和 b 的值a5;b20;if(ab):print(a 小于等于 b)else:print(a 大于 b)if(ba):print(b 大于等于 a)else:print(b 小于 a)1-a 不等于 b2-a 不等于 b3-a 大于等于 b4-a 大于 b5-a 小于等于 b6-b 大于等于 a4、逻辑运算#!/usr/bin/python3a10b20if(aandb):print(变量 a 和 b 都为 true)else:print(变量 a 和 b 有一个不为 true)if(aorb):print(变量 a 和 b 都为 true或其中一个变量为 true)else:print(变量 a 和 b 都不为 true)# 修改变量 a 的值a0if(aandb):print(变量 a 和 b 都为 true)else:print(变量 a 和 b 有一个不为 true)if(aorb):print(变量 a 和 b 都为 true或其中一个变量为 true)else:print(变量 a 和 b 都不为 true)ifnot(aandb):print(变量 a 和 b 都为 false或其中一个变量为 false)else:print(变量 a 和 b 都为 true)1-变量 a 和 b 都为 true2-变量 a 和 b 都为 true或其中一个变量为 true3-变量 a 和 b 有一个不为 true4-变量 a 和 b 都为 true或其中一个变量为 true5-变量 a 和 b 都为 false或其中一个变量为 false5、成员运算#!/usr/bin/python3a10b20list[1,2,3,4,5];if(ainlist):print(变量 a 在给定的列表中 list 中)else:print(变量 a 不在给定的列表中 list 中)if(bnotinlist):print(变量 b 不在给定的列表中 list 中)else:print(变量 b 在给定的列表中 list 中)# 修改变量 a 的值a2if(ainlist):print(变量 a 在给定的列表中 list 中)else:print(变量 a 不在给定的列表中 list 中)1-变量 a 不在给定的列表中list中2-变量 b 不在给定的列表中list中3-变量 a 在给定的列表中list中六、流程控制语句1、判断基本的语法格式:#if 条件语句: # 注意这里必须以英文的冒号结束# 条件语句为真时执行的语句ninput(输入数字:)nint(n)# input 接收到的数据都是字符串类型ifn5:print(相等)ninput(输入数字:)nint(n)ifn5:print(相等)else:# else 后边必须有英文的冒号print(No)#_*_ coding:utf-8 _*_ninput(输入数字:)# 必须输入数字来测试ifnotn:# 如果为空print(空值)# 输出 空值else:#否则nint(n)# n 转化为整型ifn5:# 如果等于5print(ok)# 输出okelifn5:# 如果 大于5print(大了)# 输出大了else:# 否则print(小了)#输出小了2、嵌套ninput(输入数字:)ifn.isdigit():f_nint(n)iff_n5:print(ok)eliff_n5:print(大了)else:print(小了)else:print(请输入数字)3、循环whileTrue:ninput(输入数字:)nint(n)ifn5:print(相等)breakelifn5:print(大了)else:print(小了)4、迭代什么是迭代​ 迭代 是重复反馈过程的活动其目的通常是为了接近并到达所需的目标或结果。​ 每一次对过程的重复被称为一次“迭代”。for 循环英语for loop​ 是一种编程语言的迭代陈述能够让程式码反复的执行。​ 它跟其他的循环如while循环最大的不同是它拥有一个循环计数器。​ 这使得for循环能够知道在迭代过程中的执行顺序,记住上次被循环元素的位置。foriinhello world:print(i)range(n)产生一个可被循环的整数序列默认序列的元素从 零 开始产生的元素数量是n个foriinrange(5):print(i)break 和 continueforiinrange(0,10):print(i)ifi3:inp_numint(input(:).strip())# inp_num int(inp_num)ifinp_num15:print(You get it)breakelifinp_num15:print(高了)else:print(低了)else:print(Game over)breakforiinrange(2,10,2):print(循环到,i)ifi4:continueprint(i)ifi6:breakrange(开始索引号:结束索引号:步长)其道理和切片一样6、作业1、使用while循环输出 1 2 3 4 5 6 8 9 102、求1-100的所有数的和3、输出 1-100 内的所有奇数4、输出 1-100 内的所有偶数5、求1-23-45 … 99的所有数的和6、用户登陆三次机会重试7、猜数游戏要求提示用户输入一个数字 inp input()判断用户输入的值是否等于 18 inp允许用户尝试 3 次假如 3 次机会都没有猜对就再次提示用户是否继续用户输出y,就再给 3 次机会。 输入n则退出游戏打印九九乘法表 shell python