初识python
python在运维方面可用于自动化运维工具开发
python对运维需求工具进行开发
python能满足大部分运维需求,又能做c/s后端架构,也能使用web框架开发web界面
python课程在学习过程中需要边看边做,对于晦涩或难懂的部分需要多看多去理解、多做
python安装
python是跨平台的开发语言,可以在windows和linux各发行版上进行安装使用,在centos上,默认安装的python版本是python2版本号的
在学习过程中着重使用python2.7的版本,使用centos系统自带版本
windows安装python
windows上的安装过程,安装在C:\Python36目录下,然后点击Install开始安装
在windows中添加python的环境变量,如下:
计算机或我的电脑右击打开属性--系统高级设置
添加python的安装路径,可在用户或系统变量中添加,加入后确认即可
打开windows的CMD,输入python进入python,输入exit()退出
linux中安装python
linux系统一般都自带如2.7版本的python,但是我们在使用时要用一个叫ipython的插件,这个插件支持python语法补全。这个插件需要自行安装,需要使用到网络来进行安装,如果系统不能联网,则需要下载需要的安装包进行编译形式安装
离线安装ipython
下载pypi:官网https://pypi.org
注:这里的包只适用于python2.7基础环境的安装
首先下载pip的安装文件,下载完成后解压并使用包内的setup.py来进行安装(pip安装可以使用最新版本的安装包文件)
[root@localhost python]# tar zxf pip-19.1.1.tar.gz -C .
[root@localhost python]# cd pip-19.1.1
[root@localhost pip-19.1.1]# python setup.py build
[root@localhost pip-19.1.1]# python setup.py install
安装ipython插件,安装ipython根据系统自带的是2.7版本的python,因此ipython还不能安装最新版本的,建议为python安装ipython-3.2左右的版本
[root@localhost python]# tar zxf ipython-3.2.0.tar.gz -C .
[root@localhost python]# cd ipython-3.2.0
[root@localhost ipython-3.2.0]# python setup.py build
[root@localhost ipython-3.2.0]# python setup.py install
一般编译安装通过后,ipython还会缺一些支持的依赖组件,这些组件可以在报错信息中找到,比如执行ipython后会报错
[root@localhost ipython-3.2.0]# ipython
Traceback (most recent call last):
File "/usr/bin/ipython", line 4, in
from IPython import start_ipython
File "/usr/lib/python2.7/site-packages/IPython/__init__.py", line 49, in
from .terminal.embed import embed
File "/usr/lib/python2.7/site-packages/IPython/terminal/embed.py", line 19, in
from IPython.terminal.ipapp import load_default_config
File "/usr/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 22, in
from IPython.core.completer import IPCompleter
File "/usr/lib/python2.7/site-packages/IPython/core/completer.py", line 71, in
from IPython.utils import generics
File "/usr/lib/python2.7/site-packages/IPython/utils/generics.py", line 8, in
from simplegeneric import generic
ImportError: No module named simplegeneric
其中注意这行:ImportError,这里提示出:No module named simplegeneric(没有名为simplegeneric这个模块),遇到这种情况需要到python官网搜索到对应的模块安装文件,然后执行setup.py进行安装
离线安装完成后,在系统命令行中输入ipython就可以进入到ipython的环境当中了,支持python语法补全及帮助
使用yum安装ipython
若服务器可连接网络,可以直接使用yum安装方式,这种方式也比较快捷简单
需要安装pip,再通过pip命令来安装ipython开发环境,安装pip则需要使用到epel的扩展安装源
epel文件可以在一些镜像网站中获取,下载后使用rpm来进行安装
[root@localhost lua]00:32# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@localhost src]02:02# rpm -ivh epel-release-6-8.noarch.rpm
Preparing... ################################# [100%]
package epel-release-6-8.noarch is already installed
若epel没有提供旧版本的python-pip,那就需要我们自己去寻找相应的python-pip安装包了,我这里安装的epel无法提供低版本的pip
[root@localhost src]03:31# yum list |grep python-pip
python-pip.noarch 7.1.0-1.el6 epel
这里我是在官网下载pip 19版本的安装包,执行python setup.py来进行安装的,出了提示setuptools的依赖需要下载安装外,其他都没有出现问题,这个步骤安装完成后就可以使用pip命令了
安装setuptools依赖支持
[root@localhost src]04:21# cd setuptools-41.0.1
[root@localhost setuptools-41.0.1]04:21# python setup.py install
安装pip,安装完成后就可以使用pip install ipython来安装了
[root@localhost pip-19.1.1]04:22# python setup.py install
[root@localhost src]04:07# pip install ipython
安装完成后不出问题的话可顺利打开ipython环境
安装python3
为什么还要安装python3环境的ipython
因为python官方给出一个说明提示,提示中详细描述python会在未来不再提供支持维护:
Python 2.7将于2020年1月1日到期。请升级您的Python,因为在该日期之后将不再维护Python 2.7。 未来的pip版本将放弃对Python 2.7的支持。
首先编译安装openssl,openssl是pip对ssh访问的一个功能模块,但python内置的openssl会有一定的版本问题,导致ssh无法访问
进入openssl的解压目录
./config --prefix=/usr/local/openssl no-zlib #不需要zlib模块
make
make install
为openssl相关module创建软连接
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
写入openssl库文件的搜索路径
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
使修改后的/etc/ld.so.conf生效
ldconfig -v
查看openssl版本
openssl version
下载python3的安装包文件,解压到指定目录下,cd到解压目录后执行编译安装,编译时指定手动安装的openssl安装路径,也就是说使用自己编译安装的openssl模块,在这个步骤也需要安装好SQLite模块支持
[root@localhost Python-3.7.3]04:27# cd /
[root@localhost /]04:28# cd /usr/local/src/Python-3.7.3
[root@localhost Python-3.7.3]04:28# ./configure --prefix=/usr/local/python3 --enable-optimizations --with-openssl=/usr/local/openssl && make && make install
为python3安装ipython
安装过程中会遇到setuptools的模块报错,而安装setuptools又会出现No module named '_ctypes'的错误。
在这个步骤时,首先下载pip和setuptools包,对setuptools和pip进行安装,在进入Python解压目录进行make install,并对python3做软连接和系统环境变量的全局配置
[root@localhost /]04:28# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[root@localhost /]04:28# echo "PATH=$PATH:$HOME/bin:/usr/local/python3/bin" >> /etc/profile
安装ipython,在安装ipython过程中,如果遇到pip is configured with locations that require TLS/SSL问题,那么这个就是openssl版本较低的问题,需要编译安装一个高版本的openssl服务,安装完成后执行pip3 install ipython就可以安装ipython环境了
在执行pip3 install ipython过程中,如果提示出
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
翻译过来就是说需要对pip库进行升级,因为在库中找不到所需要的版本包,这里根据提示执行pip3 ubstakk --upgrade pip升级下即可。
注:为什么pip3,因为依照python3.7来进行安装的pip环境,待ipython安装完成后,其命令也是ipython3
缺少SQLite模块
ipython3这个命令能成功使用后,进入python环境又发现提示ipython是不能够保存操作历史记录的,因为编译安装时没有提供sqlite这个模块依赖支持,这里没办法,只能删除安装目录重新编译安装python3
进入ipython后又出现了/usr/local/python3/lib/python3.7/site-packages/IPython/core/history.py:226: UserWarning: IPython History requires SQLite, your history will not be savedwarn("IPython History requires SQLite, your history will not be saved")的提示信息,大概意思说ipython的记录不会被保存,因为没有SQLite记录数据库支持
这里还得重新编译python重新加入SQLite支持才行,删除之前安装好的python目录和解压目录,编译安装好sqlite后,重新编译安装python
安装SQLite
编译安装的sqlite不能正常被python加载,所以寻找到yum安装sqlite的方法,并且通过了ipython的支持。yum安装SQLite:
yum install sqlite-devel
重新编译安装python
[root@localhost Python-3.7.3]07:26# ./configure --prefix=/usr/local/python3 --enable-optimizations --with-openssl=/usr/local/openssl && make && make install
[root@localhost Python-3.7.3]07:26# pip install --upgrade pip
[root@localhost Python-3.7.3]07:26# pip3 install ipython
ipython3查看安装的环境
python文件类型
python在linux系统上有两种编写方式,一个是在ipython中编写python,另一个就是在文件中写入python程序
在文件中写入一个打印hello world的语句,这种是通常的文本格式编写方式
python文件前必须要声明python的路径,否则执行时会被当成bash文件来执行
[root@localhost file]10:00# vim yli.py
#/usr/bin/python3
print "hello world!"
[root@localhost file]10:00# python yli.py
hello world!
pyc格式的python文件
字节代码,通过compile模块编译后生成的后缀名为pyc的文件,源文件经过编译后成为字节代码文件,使用cat等命令无法查看到内容
pyc格式文件需要声明一下模块,然后再来编译python文件,这样的话编译模块的语法需要另写一个文件中
test.py是需要编译的文件,tlist.py是编译语法文件
[root@localhost file]10:47# vim tlist.py
#!/usr/bin/python
import py_compile
py_compile.compile('test.py')
test.py文件内容
[root@localhost file]10:47# vim test.py
#/usr/bin/python3
print '123456'
使用编译模块的文件编译之后执行pyc格式的脚本文件,输出和test.py同样的内容,但是pyc文本变成了二进制文件,文件内容不可看
[root@localhost file]10:50# python tlist.py
[root@localhost file]10:51# ls
test.py test.pyc tlist.py yli.py
[root@localhost file]10:51# python test.pyc
123456
pyo格式文件
pyo也是将python文件编译成二进制文件,不同的是,pyo对python有一定优化,-O指定表示优化,-m指定的加载模块
[root@localhost file]10:58# python -O -m py_compile test.py
[root@localhost file]10:58# ls
test.py test.pyc test.pyo tlist.py yli.py
[root@localhost file]10:58# python2 test.pyo
123456
python变量
变量的意义:变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且这个值可以改变。python下的变量是对一个数据的引用,就比如通过标签来引用一个数值
变量的命名:变量名由字母、数字和下划线组成,变量不能以数字开头,不能有python的模块等系统关键字。变量的赋值,是变量的声明和定义的过程。如a = 1,变量通常使用=号来定义,读作1赋值给a
变量赋值
变量赋值和重新赋值的内存区域变化
变量a在引用第一个数值时在内存区域中是9307072区域,当重新赋值后,变量a的区域id发生变化,这里变成为了9307104
In [1]: a = 1
In [2]: id(a)
Out[2]: 9307072
In [3]: a = 2
In [4]: id(a)
Out[4]: 9307104
变量赋值运算符
将一个变量赋值,赋值有并且运算,比如将一个整数变量进行+ - / *的运算
变量y初始的值为3,数值类型为整数(int)
使用+=表示y变量的数值相加后面的数值返回的相加结果再赋值给变量y
In [1]: y = 3
In [2]: y += 3
In [3]: y
Out[3]: 6
使用-=表示y变量的数值减去后面的数值再得出减后的数再赋值给变量y
In [6]: y -= 2.7
In [7]: y
Out[7]: 3.3
使用*=表示y变量的数值和后面数值返回相乘的结果再赋值给变量y
In [8]: y *= 5
In [9]: y
Out[9]: 16.5
使用/=表示y变量的数值除以后面的数得出的结果返回并赋值个变量y
In [10]: y /= 3
In [11]: y
Out[11]: 5.5
python算术运算符
python运算包含基本的四则运算:
+ 加运算 - 减运算 * 乘运算 / 除运算,除数加上小数点可以取得一个精确的浮点结果 // 整除 % 除运算取余 ** 运算乘方
+ 加运算
In [12]: 7 + 9
Out[12]: 16
- 减运算
In [13]: 5 - 9
Out[13]: -4
* 乘运算
In [14]: 0 * 1
Out[14]: 0
In [15]: 2 * 1
Out[15]: 2
/ 除运算,除运算加上小数点可以取得一个浮点数的运算结果
In [19]: 9.0 / 3
Out[19]: 3.0
In [20]: 10.0 / 3
Out[20]: 3.3333333333333335
// 整除运算,不管是否有余数,只取整数结果
In [21]: 100 // 3
Out[21]: 33
% 除运算取余数,运算后不要整数结果,只取值余数结果
In [22]: 100 % 3
Out[22]: 1
** 乘方运算
In [24]: 100 ** 3
Out[24]: 1000000
python关系运算符
关系运算符返回布尔值结果,true表示关系成立(如3等于3、3小于5),false表示关系不成立(如1大于2)
关系运算符常见的有六种:
> 大于 < 小于
>= 大于等于 < = 小于等于
== 等于 !=不等于
布尔值返回示例:
In [38]: 1 > 2 1大于2
Out[38]: False
In [39]: 1 < 2 1小于2
Out[39]: True
In [40]: 1 >= 2 1大于或等于2
Out[40]: False
In [41]: 1 >= 1 1大于或等于1
Out[41]: True
In [42]: 1 <= 2 1小于或等于2
Out[42]: True
In [43]: 1 <= 1 1小于或等于1
Out[43]: True
In [44]: 1 == 1 1等于1
Out[44]: True
In [45]: 1 != 2 1不等于2
Out[45]: True
逻辑运算符
and 逻辑与: true and false 两个表达式都成立返回true,有一个不成立就返回false
or 逻辑或 : false and true 两个表达式只要有一个成立就返回true
not 逻辑非 : not true 表达式不成立返回true
逻辑运算:or
逻辑运算:and
逻辑运算:not
成员测试:in,not in
同一性测试:is,is not
比较:<,<=,>,>=,!=,==
按位或:|
按位异或:^
按位与:&
移位:<<,>>
加减法:+,-
乘法、除法和取余:*,/,%
正负号:+x,-x
按位翻转: ~x
指数: **
从键盘输入读取数值
input 从键盘读取输入,实现输入交互
input("Please input:")
%s 表示引用的变量数值,不同的%s表示不同位置的变量数值,最后一个%s等于两个变量(num1和num2运算的结果引用)
一个小的计算脚本示例:
[root@localhost src]# cat list.py
#!/usr/bin/python
num1 = input("Please a number: ")
num2 = input("Please a number: ")
print "%s + %s = %s" % (num1, num2, num1+num2)
print "%s - %s = %s" % (num1, num2, num1-num2)
print "%s * %s = %s" % (num1, num2, num1*num2)
print "%s / %s = %s" % (num1, num2, num1/num2)
[root@localhost src]# python jisuan.py
Please a number: 3
Please a number: 4
3 + 4 = 7
3 - 4 = -1
3 * 4 = 12
3 / 4 = 0