初识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开始安装

spacer.gif

在windows中添加python的环境变量,如下:

 计算机或我的电脑右击打开属性--系统高级设置

spacer.gif

 添加python的安装路径,可在用户或系统变量中添加,加入后确认即可

spacer.gif

 

打开windows的CMD,输入python进入python,输入exit()退出

spacer.gif

 linux中安装python

linux系统一般都自带如2.7版本的python,但是我们在使用时要用一个叫ipython的插件,这个插件支持python语法补全。这个插件需要自行安装,需要使用到网络来进行安装,如果系统不能联网,则需要下载需要的安装包进行编译形式安装

离线安装ipython

下载pypi:官网https://pypi.org

spacer.gif注:这里的包只适用于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环境

spacer.gif

安装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查看安装的环境

spacer.gif

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