1. Python 基础概述 和 环境安装 Python 推荐书籍 开发环境 - Pyenv pip 通用配置 Jupyter 安装和配置 编程基础

  • 荷兰人 Guido van Rossum,2005年加入Google,2013年加入Dropbox
  • 1989年,创立Python语言,1991年初发布第一个公开发行版
  • 他是英国BBC喜剧《Monty Python's Flying Circus》的忠实粉丝
  • Python哲学
    • import this

推荐书籍

  1. 《Python Cookbook》
  2. 《Learn Python The Hard Way》
  3. 《Google's Python Class》
  4. 《简明Python教程》

开发环境 - 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)

请仔细看上述操作

  1. 创建了一个名为cmdb的虚拟环境
  2. 然后创建了一个cmdb的目录
  3. 进入cmdb目录后,在应用cmdb虚拟环境到cmdb目录下
  4. 就完成了虚拟环境的应用

可以看到当进入到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 是动态语言、强类型语言
  • 静态编译语言
  • 实现声明变量类型,类型不能再改变
  • 编译时检查
  • 动态编译语言
  • 不用实现声明类型,随时可以复制为其他类型
  • 编译时不知道是什么类型,很难推断
  • 强类型语言

不同类型之间操作,必须要强制类型转换为同一类型

  • 弱类型语言

不同类型间可以操作,自动隐式转换