Python
- 荷兰人 Guido van Rossum,2005年加入Google,2013年加入Dropbox
- 1989年,创立Python语言,1991年初发布第一个公开发行版
- 他是英国BBC喜剧《Monty Python's Flying Circus》的忠实粉丝
- Python哲学
- import this
推荐书籍
- 《Python Cookbook》
- 《Learn Python The Hard Way》
- 《Google's Python Class》
- 《简明Python教程》
开发环境 - Pyenv
- Python多版本管理工具
-
- 管理Python解释器
-
- 管理Python版本
-
- 管理Python虚拟环境
- 官网 https://github.com/pyenv/pyenv
新建Python用户
[root@node ~]# useradd python
# 非交互式设置用户密码
[root@node ~]# echo '123456' | passwd python --stdin
Changing password for user python.
passwd: all authentication tokens updated successfully.
安装pyenv
下面这两个链接是完全一样的,一个是老的URL,一个是新的URL,是用来安装pyenv的。
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
# 切换到python用户来执行
[root@node ~]# su - python
Last login: Wed Dec 12 13:16:17 CST 2018 on pts/1
[python@node ~]$ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
... ...
export PYENV_ROOT=/home/python/.pyenv
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
执行之后,会下载很多组件来支撑;最后提示一个环境变量配置
完成后,把最后提示的环境变量配置到~/.bash_profile
文件中
[python@node ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PYENV_ROOT=/home/python/.pyenv
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
# 最后加载一下即可;
[python@node ~]$ source .bash_profile
此时,pyenv就安装完成了
pyenv 使用
Pyenv基本参数
[python@node ~]$ pyenv
pyenv 1.2.7
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
commands List all available pyenv commands
local Set or show the local application-specific Python version
global Set or show the global Python version
shell Set or show the shell-specific Python version
install Install a Python version using python-build
uninstall Uninstall a specific Python version
rehash Rehash pyenv shims (run this after installing executables)
version Show the current Python version and its origin
versions List all Python versions available to pyenv
which Display the full path to an executable
whence List all Python versions that contain the given executable
See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme
参数 | 详解 |
---|---|
commands | 列出所有可用的pyenv命令 |
local | 设置或显示本地特定于应用程序的Python版本 |
global | 设置或显示全局Python版本 |
shell | 设置或显示特定于shell的Python版本 |
install | 使用python-build安装Python版本 |
uninstall | 卸载特定的Python版本 |
rehash | 安装可执行文件后运行 |
version | 显示当前的Python版本及其来源 |
versions | 列出pyenv可用的所有Python版本 |
which | 显示可执行文件的完整路径 |
whence | 列出包含给定可执行文件的所有Python版本 |
查看pyenv版本
[python@node ~]$ pyenv --version
pyenv 1.2.7
查看当前能安装的python版本
使用 pyenv install -l
来查看
[python@node ~]$ pyenv install -l
Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5
2.5.1
... ...
# 信息太多
提示:这里install安装下载,会比较慢,在python用户的家目录下,有一个隐藏目录
.pyenv
中,有一个cache
目录,如果没有,手动创建即可,然后可以手动下载python的安装包,上传至此,在pyenv install 的时候,就不会去下载,会直接安装。
使用pyenv安装python
直接使用命令pyenv install 3.5.3
来进行安装,会自动下载、构建、安装。
查看当前有哪些Python版本
version 和 versions 的区别是version查看的是当前python版本,而versions是查看所有已安装的python版本
[python@node cache]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
可以看到,system表示系统使用的python版本,前面有个*
号,表示当前应用的是系统自带的python。
也就是说,*
号在那个版本前面,表示应用的什么版本的python
设置Python版本
global 参数
使用
pyenv global 3.5.3
切记,这里用的global是因为在非root用户下,是在python用户下,在root用户下,不要使用global参数,否则影响太大。
local 参数
使用
pyenv local 3.5.3
设置从当前目录设置乡下递归都集成这个设置,上层目录不影响;
查看演示效果
创建三个层次的test目录,在中间层test目录中,使用pyenv local 3.5.3
命令,然后分别取上一层test和下一层test目录中查看python版本;
[python@node ~]$ mkdir test/test -p
[python@node ~]$ cd test/test/
[python@node test]$ python -V
Python 2.7.5
[python@node test]$ pyenv local 3.5.3
[python@node test]$ python -V
Python 3.5.3
[python@node test]$ cd ..
[python@node test]$ python -V
Python 2.7.5
[python@node test]$ cd test/
[python@node test]$ mkdir test
[python@node test]$ cd test/
[python@node test]$ python -V
Python 3.5.3
shell 参数
使用
pyenv shell 3.5.3
当前会话shell有关系,不同会话可以设置不同的python版本,但当会话结束后则恢复
virtualenv 虚拟环境
virtualenv 是一个python的组件安装包的统一管理,可以有多个virtualenv虚拟环境,每个人使用一个,这样每个人独立管理自己的python包,不会和系统的相互干扰。
如:创建一个python版本为3.5.3 的虚拟环境,名称为:cmdb
[python@node ~]$ pyenv virtualenv 3.5.3 cmdb
Requirement already satisfied: setuptools in /home/python/.pyenv/versions/3.5.3/envs/cmdb/lib/python3.5/site-packages
Requirement already satisfied: pip in /home/python/.pyenv/versions/3.5.3/envs/cmdb/lib/python3.5/site-packages
[python@node ~]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
3.5.3/envs/cmdb
3.6.1
cmdb
[python@node ~]$ mkdir cmdb
[python@node ~]$ cd cmdb/
(cmdb) [python@node cmdb]$ pyenv version
(cmdb) [python@node cmdb]$ cd ..
[python@node ~]$ cd cmdb
(cmdb) [python@node cmdb]$ pyenv versions
system
3.5.3
3.5.3/envs/cmdb
3.6.1
* cmdb (set by /home/python/cmdb/.python-version)
请仔细看上述操作
- 创建了一个名为
cmdb
的虚拟环境 - 然后创建了一个
cmdb
的目录 - 进入
cmdb
目录后,在应用cmdb
虚拟环境到cmdb
目录下 - 就完成了虚拟环境的应用
可以看到当进入到cmdb
目录后,提示符最前面出现(cmdb)
的样式,表示进入了cmdb的虚拟环境。
此时在
cmdb
虚拟环境下使用pip
安装的所有包,都和其他的python环境没有任何关联。这一点很重要,避免了环境混乱和冲突。
pip 通用配置
正常情况下,使用
pip
来安装,默认网络很慢,经常造成超时等不能安装的情况,下面来配置pip下载通过阿里云,增加下载速度
具体操作如下
[python@node ~]$ mkdir ~/.pip
[python@node ~]$ cat ~/.pip/pip.conf
[global]
index-url=http://mirrors.aliyun.com/pypi/simple
trusted-host=mirrors.aliyun.com
那通过上述配置后,再使用pip来安装包的时候,下载速度就很快了。
pip导出和导入
导出当前python版本下的pip安装的所有的包组
pip freeze > requirement
安装requirement文件中所有的包组并对应其版本
pip install -r requirement
Jupyter 安装和配置
安装 jupyter
进入到刚刚创建的cmdb虚拟环境目录下,直接使用pip install jupyter
来进行安装即可;
启动jupyter
启动前需要使用jupyter notebook password
来自定义修改密码
使用命令:
jupyter notebook --ip=0.0.0.0 --port=8888
编程基础
程序
一组能让计算机识别和执行的指令
电子计算机
能够执行程序的机器
现代计算机
艾伦 麦席森 图灵
(Alan Mathison Turing,1912年6月23日 - 1954年6月7日),英国数学家、逻辑学家,被称为计算机之父,人工智能之父。图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础冯 诺依
曼著名匈牙利裔美籍犹太人数学家、计算机科学家、物理学家和化学家,数字计算机之父。他提出了以二进制作为数字计算机的数制基础,计算机应该按照程序的顺序执行,计算机因该有五大部件。
- CPU由运算器和控制器组成
- 运算器,完成各种算术运算、逻辑运算、数据传输等数据加工处理
- 控制器,控制程序的执行
- 存储器,用于记忆程序和数据,例如内存
- 输入设备,将数据或者输入到计算机中,例如键盘,鼠标
- 输出设备,将数据或程序的处理结果展示给用户,例如显示器、打印机等
编程基础
计算机语言
人与计算机之间交互的语言
机器语言
- 一定位数组成二进制的0和1的序列,成为机器指令。机器指令的集合就是机器语言
- 与自然语言差异太大,难学、难懂、难写、难记、南差错
汇编语言
- 用一些助记符号替代指令,成为汇编语言。ADD A,B指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
- 汇编语言写好的程序需要汇编程序转换成机器指令
- 汇编语言只能稍微好记了一些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言
语言分类
低级语言
- 面向机器的语言,包括机器语言、汇编语言
- 不同的机器不能通用,不同的机器需要不同的机器指令或者汇编程序
高级语言
- 接近自然语言和数学语言的计算机语言
- 高级语言首先要书写源程序,通过汇编程序把源程序转换成机器指令的程序
- 1954年正式发布的
Fortran
语言是最早的高级语言,本意是公式翻译 - 人们只需要关系怎么书写程序,针对不同机器的编译的事交给编译器关心处理
低级语言到高级语言
- 语言越高级,越接近人类的自然语言和数学语言
- 语言越低级,越能让机器理解
- 高级语言和低级语言之间需要一个转换的工具:编译器、解释器
- C、C++ 等语言的源代码需要本地编译
- Java、Python、C# 的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机上运行
- 编辑语言,把源代码转换成目标机器的CPU指令
- 解释语言,解释后转换成字节码,运行在虚拟机上,解释器执行中间代码
高级语言的发展
非结构化语言
- 编号或标签、GOTO,子程序可以有多个入口和出口
- 有分支、循环
结构化语言
- 任何基本结构只允许是唯一入口和唯一出口
- 顺序、分支、循环,飞起GOTO
面向对象语言
- 更加接近人类认知世界的方式,万事万物抽象对象,对象间关系抽象成类和继承
- 封装、继承、多态
函数式语言
- 古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
- 函数是“一等公民”,高阶函数
程序Program
程序
- 算法 + 数据结构 = 程序
- 数据是一切程序的合信
- 数据结构是数据在计算机中的类型和组织方式
- 算法是处理数据的方式,算法有优劣之分
写程序难点
- 理不清数据
- 搞不清处理方式
- 无法把数据设计转换成数据结构,无法把处理方式转换成算法
- 无法用设计范式来进行程序设计
- 世间程序皆有
bug
,但不会debug
Python解释器
官方Cpython
- C语言开发的,最广泛的Python解释器
Ipython
- 一个交互式、功能增强的
Cpython
PyPy
- Python、语言写的Python解释器,
JIT
技术,动态编译Python代码
Jython
- Python的源代码编译成
Java
的字节码,跑在JVM
上
IronPython
- 与Jython类似,运行在
.Net
平台上的解释器,Python代码呗变异成.Net
的字节码
Python 的语言类型
- Python 是动态语言、强类型语言
- 静态编译语言
- 实现声明变量类型,类型不能再改变
- 编译时检查
- 动态编译语言
- 不用实现声明类型,随时可以复制为其他类型
- 编译时不知道是什么类型,很难推断
- 强类型语言
不同类型之间操作,必须要强制类型转换为同一类型
- 弱类型语言
不同类型间可以操作,自动隐式转换