01-Python入门之语言发展和环境安装
一、Pyhon 作者介绍
- 荷兰人Guido van Rossum ,2005年加入Google,2013年加入Drobox
- 1989年,创立了python语言,1991年初发布了第一个公开发行版
- 1989年圣诞节期间,为了打发无聊的时间,荷兰人Guido van Rossum(数学、计算机双硕士,2005年加入Google,2013年加入DropBox),决心开发一种新的解释性脚本语言。
- 1991年初发布了第一个公开发行版。由于他是英国BBC喜剧《Monty Python's Flying Circus》的忠实粉丝,因此为这门语言取名Python。
- Python目前已经成为很多大学的编程课语言。甚至在国内一些考试已经引入了Python。科学计算方面、运维领域Python几乎已经成为最主要的编程语言,拥有非常方便快捷开发的库。
- Python的哲学,可以使用import this 查看Python之禅。
二、Python版本介绍
- 版本
- 2.x发展到了2.7
- 2.x最后一个版本是2.7,很多企业为了兼容老项目依然在维护。Python2将在2019年底不在支持,官方还提供了一个倒计时网站https://pythonclock.org/。
- 3.x
- 发展到了3.6
- 3.x始自2008年。3.5分布于2015年
- 3.x还在不断的扩充发展,当前主流版本是3.6。
- 2015年9月发布3.5,2016年12月发布3.6,2018年6月发布3.7,2019年10月发布3.8.0。
- 2.x发展到了2.7
- 2.x和和3.x区别
- 语句函数化,例如print(1,2) 打印出1 2 ,但是在2.x中意思就是print语句打印元组,3.x中意思就是函数的2个参数
- 整除,例如1/2和1//2 ,3.x版本中/ 为自然除
- 3.x中raw_input重命名为input,不再使用raw_input
- round函数,在3.x中 i.5 的取整数变为距离最近的偶数
- 字符串统一使用Unicode
- 异常的捕获,抛出的语法变化
- 版本总结
- 不要迷信版本,学会一个版本,好好学会一门语言,其他都不是问题
三、开发环境之Pyenv
- python多版本管理工具
- 管理pthon解释器
- 管理python版本
- 管理python的虚拟环境
- 官网:https://github.com/pyenv/pyenv
四、Pyenv开发环境安装(Linux环境)
- 参照安装文档
- pyenv的安装(自动安装路径:https://github.com/pyenv/pyenv-installer)
- CentOS7默认还是Python2.7,而开发环境如果是高版本Python就带来了问题。为了不破坏当前系统使用,甚至以后为了多个Python项目部署(这些项目使用不同Python解释器版本),建议使用多版本工具。
4.1、pyenv多版本
1、linux操作系统下安装pyenv(从最小的安装的系统开始)
pyenv安装方式
pyenv安装使用git
# yum install git -y
2、安装python安装的依赖(pyenv是源代码编译安装Python解释器,所以一定要安装gcc等依赖。)
# yum install gcc make path gdbm-devel openssl-devel sqlite-devel readline-devel readline-devel zlib-devel bzip2-devel -y
3、创建python用户
# useradd python
# echo "python" | passwd --stdin python
4、使用python用户登陆(下面脚本需要在python用户下运行)
# su - python
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
由于某些原因,浏览器可以访问,大家自行下载保存为shell脚本执行
https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer
或者使用项目源码文件
https://github.com/pyenv/pyenv-installer/blob/master/bin/pyenv-installer
--------------------------
脚本如下:
~]# cat python_pyenv.sh
#!/usr/bin/env bash
#yum install git -y
#yum install gcc make path gdbm-devel openssl-devel sqlite-devel readline-devel readline-devel zlib-devel bzip2-devel -y
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "$PYENV_ROOT" ]; then
PYENV_ROOT="${HOME}/.pyenv"
fi
colorize() {
if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
else echo -n "$2"
fi
}
# Checks for `.pyenv` file, and suggests to remove it for installing
if [ -d "${PYENV_ROOT}" ]; then
{ echo
colorize 1 "WARNING"
echo ": Can not proceed with installation. Kindly remove the '${PYENV_ROOT}' directory first."
echo
} >&2
exit 1
fi
shell="$1"
if [ -z "$shell" ]; then
shell="$(ps c -p "$PPID" -o 'ucomm=' 2>/dev/null || true)"
shell="${shell##-}"
shell="${shell%% *}"
shell="$(basename "${shell:-$SHELL}")"
fi
failed_checkout() {
echo "Failed to git clone $1"
exit -1
}
checkout() {
[ -d "$2" ] || git clone --depth 1 "$1" "$2" || failed_checkout "$1"
}
if ! command -v git 1>/dev/null 2>&1; then
echo "pyenv: Git is not installed, can't continue." >&2
exit 1
fi
if [ -n "${USE_GIT_URI}" ]; then
GITHUB="git://github.com"
else
GITHUB="https://github.com"
fi
checkout "${GITHUB}/pyenv/pyenv.git" "${PYENV_ROOT}"
checkout "${GITHUB}/pyenv/pyenv-doctor.git" "${PYENV_ROOT}/plugins/pyenv-doctor"
checkout "${GITHUB}/pyenv/pyenv-installer.git" "${PYENV_ROOT}/plugins/pyenv-installer"
checkout "${GITHUB}/pyenv/pyenv-update.git" "${PYENV_ROOT}/plugins/pyenv-update"
checkout "${GITHUB}/pyenv/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"
checkout "${GITHUB}/pyenv/pyenv-which-ext.git" "${PYENV_ROOT}/plugins/pyenv-which-ext"
if ! command -v pyenv 1>/dev/null; then
{ echo
colorize 1 "WARNING"
echo ": seems you still have not added 'pyenv' to the load path."
echo
} >&2
case "$shell" in
bash )
profile="~/.bashrc"
;;
zsh )
profile="~/.zshrc"
;;
ksh )
profile="~/.profile"
;;
fish )
profile="~/.config/fish/config.fish"
;;
* )
profile="your profile"
;;
esac
{ echo "# Load pyenv automatically by adding"
echo "# the following to ${profile}:"
echo
case "$shell" in
fish )
echo "set -x PATH \"${PYENV_ROOT}/bin\" \$PATH"
echo 'status --is-interactive; and . (pyenv init -|psub)'
echo 'status --is-interactive; and . (pyenv virtualenv-init -|psub)'
;;
* )
echo "export PATH=\"${PYENV_ROOT}/bin:\$PATH\""
echo "eval \"\$(pyenv init -)\""
echo "eval \"\$(pyenv virtualenv-init -)\""
;;
esac
} >&2
fi
----------------------------
5、在python用户的~/.bash_profile中追加
$ vim ~/.bash_profile
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
$ source ~/.bash_profile
6、查看Python的运行环境版本
~]$ python -V
Python 2.7.5
7、查看python运行在当下的环境版本
~]$ pyenv version
system (set by /home/python/.pyenv/version) #当前python版本,system表示当前操作系统使用的版本
8、查看已经安装的所有python版本
~]$ pyenv versions
9、查看当下环境可以安装python的解释器有哪些
~]$ pyenv install -l
4.2、python多版本安装(pyenv)
1、安装适合生产环境需求的python解释器(版本选择:能跑程序就ok)
~]$ pyenv install 3.6.6 -vvv
Downloading Python-3.6.6.tar.xz...
-> https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz #这样下载会很慢
2、缓存文件
由于连接国外网站速度太慢,可以先下载好将要安装的Python版本的安装包,直接放置在
~/.pyenv/cache目录下,再进行安装。此cache目录不存在,请自行创建。
~]$ cd ~/.pyenv/
.pyenv]$ mkdir cache/
cache]$ pwd
/home/python/.pyenv/cache
cache]$ ls
Python-3.5.3.tar.xz Python-3.6.6.tar.xz
Python-3.5.3.tgz Python-3.6.6.tgz
~]$ pyenv install 3.6.6 -v #从本地安装(编译安装)
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1 #pip包管理工具相当于yum命令、setuptools安装工具做的依赖文件
Installed Python-3.6.6 to /home/python/.pyenv/versions/3.6.6
3、再次查看python运行在当下的环境版本
~]$ pyenv version
system (set by /home/python/.pyenv/version) #当前操作系统使用的系统环境
~]$ pyenv versions
* system (set by /home/python/.pyenv/version) #查看当前系统中pyenv可以关系的所有环境
3.6.6 #版本信息
4、多版本安装
~]$ pyenv install 3.5.3 -v #从本地安装(编译安装,可以适用选项-vvv查看更多详细信息)
4.3、pyenv之python环境设置
4.3.1、global、shell、local的设置
1、global (多版本)设置python全局的运行环境应该慎用--全局性
~]$ pyenv global 3.6.6
~]$ pyenv versions
system
3.5.3
* 3.6.6 (set by /home/python/.pyenv/version) #将3.6.6版本设置为python默认的运行环境
~]$ python -V #查看python版本信息,如果没有变化尝试开启新的终端查看,但是python版本信息改变的仅是python用户,root用户还是为默认的版本环境
Python 3.6.6
如果失误修改了root用户的python运行的版本环境怎么办
~]$ pyenv global system #修改为默认的运行版本环境
~]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
3.6.6
取消local设置
~]$ pyenv local --unset
----------------------------------------------------
2、shell 设置当前shell的python运行环境,仅对当前shell会话有关--临时性
~]$ python -V #也可以使用pythom --version
Python 2.7.5
~]$ pyenv shell 3.6.6
~]$ pyenv versions
system
3.5.3
* 3.6.6 (set by PYENV_VERSION environment variable)
#若退出当前会话或者查看其他用户则继续保留系统默认的system的python运行环境
-----------------------------------------------------
3、local 设置用户当前所在目录的python运行环境--本地性(当前所在路径,即项目目录)
#创建一个存放代码的路径,以后写代码就在此路径下编写就ok了
~]$ mkdir -p daizhe/projects/web/ #默认后续创建的子目录是继承上级目录的运行环境的,除非在子目录下再次设置其他运行环境
~]$ cd daizhe/projects/web/ #仅设置以后编写代码的目录的python运行环境
web]$ pyenv local 3.6.6
web]$ python -V
Python 3.6.6
~]$ pyenv versions #其他目录则保持默认的运行环境
* system (set by /home/python/.pyenv/version)
3.5.3
3.6.6
--------------------------------------------------------
4、pyenv运行环境三种方式的实现机制
~]$ cd /home/python/daizhe/projects/web/
web]$ ls -a
.python-version #此目录下的有一个隐藏文件,里面存有版本号,实现了python运行环境多版本问题
web]$ cat .python-version
3.6.6
4.3.2、pyenv的虚拟环境
- 为什么使用虚拟环境?
- 因为刚才使用python环境都是一个公共空间,如果多个项目使用不同python版本开发,或者使用不同的python版本部署运行,或者使用同样版本开发的但不同项目使用了不同版本的库,等等这些问题都会带来冲突。最好的解决办法就是每一个项目地理运行自己的独立小环境中。
- 使用pyenv local 命令建立一个目录和一个Python版本或虚拟版本之间的关系,该目录的子孙目录默认也继承这个版本,也支持在子目录中设定不同的python版本,但是不推荐这样使用。
使用插件,在python/pyenv-virtualenv中
1、创建第一个虚拟环境
web]$ pwd
/home/python/daizhe/projects/web
web]$ pyenv virtualenv 3.6.6 daizhe666 #daizhe666为环境别名
Looking in links: /tmp/tmp7lsy_d5l
Requirement already satisfied: setuptools in /home/python/.pyenv/versions/3.6.6/envs/daizhe666/lib/python3.6/site-packages (39.0.1)
Requirement already satisfied: pip in /home/python/.pyenv/versions/3.6.6/envs/daizhe666/lib/python3.6/site-packages (10.0.1)
web]$ pyenv versions
* system
3.5.3
3.6.6 (set by /home/python/daizhe/projects/web/.python-version)
3.6.6/envs/daizhe666
daizhe666
2、使用当前loca环境为自己添加的虚拟环境
web]$ pyenv local daizhe666
(daizhe666) [python@centos7 web]$ pyenv versions #括号代表进入虚拟环境
system
3.5.3
3.6.6
3.6.6/envs/daizhe666
* daizhe666 (set by /home/python/daizhe/projects/web/.python-version)
3、创建第二环境,返回设置虚拟环境的目录下验证是否会相互影响
app]# pwd
/home/python/daizhe/projects/app
app]# python -V
Python 2.7.5
4、在设置虚拟化境的目录安装一些程序进行测试
(daizhe666) [python@centos7 web]$ pwd
/home/python/daizhe/projects/web
(daizhe666) [python@centos7 web]$ pip install redis
(daizhe666) [python@centos7 web]$ pip list
Package Version
---------- -------
pip 10.0.1
redis 3.2.1
setuptools 39.0.1
5、安装的程序使用的库以及python运行环境仅在当前虚拟空间下生效,不影响其他python环境
6、更新:$ pyenv update
五、IP通用配置
5.1、Linux版
- pip是python的包管理工具,3.x的版本直接带了,直接可以用,和yum一样为了使用国内镜像,配置如下
1、linux操作系统
[python@centos7 ~]$ mkdir ~/.pip
[python@centos7 ~]$ cd ~/.pip/
[python@centos7 .pip]$ touch pip.conf
[python@centos7 .pip]$ vim pip.conf
[global]
index-url=https://mirrors.aliyun.com/pypi/simple #找库去aliyun找
trusted-host=mirrors.aliyun.com #信任
2、现在可以测试安装程序,可以查看到下载源,确认是否为aliyun
(daizhe666) [python@centos7 web]$ pip install ipython
3、pip常用命令
pip list #查看当前环境已经下载的包
pip freeze #冻结当前所有的库
pip freeze > /path/to/filec #假设运行此条命令的环境为测试环境,将次环境下的所有库信息重定向到file文件
pip install -r /path/to/file #假设运行此条命令的环境为生产环境,此命令读取文件中的库名称及包版本号进行安装
4、下载的库的路径(验证为什么虚拟空间和普通全局空间的库互不影响)
site-packages]$ pwd #envs代表虚拟环境
/home/python/.pyenv/versions/3.6.6/envs/daizhe666/lib/python3.6/site-packages
site-packages]$ pwd #此路径为全局下载库的路径
/home/python/.pyenv/versions/3.6.6/lib/python3.6/site-packages
5.2、Windows版
- windows下pip的配置文件在~/pip/pip.ini内容同上(创建目录时可以使用gitbash工具创建)
- windows的家目录,在"运行"中键入"."
阿里云镜像站pypi :https://developer.aliyun.com/mirror/pypi?spm=a2c6h.13651102.0.0.53322f70XkFhZB
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
5.3、pip常用命令(导出包)
- 项目中开发完毕,要部署前,可以先导出当前使用的各种包的版本。在目标机器上安装这些包。
1、pip常用命令
pip list #查看当前环境已经下载的包
pip freeze #冻结当前所有的库
pip freeze > /path/to/filec #假设运行此条命令的环境为测试环境,将次环境下的所有库信息重定向到file文件
pip install -r /path/to/file #假设运行此条命令的环境为生产环境,此命令读取文件中的库名称及包版本号进行安装
2、冻结所有的库并导出环境
(pc369) [python@VM_0_11_centos pc1]$ pip install redis #在此虚拟环境下安装redis
(pc369) [python@VM_0_11_centos pc1]$ pip list
Package Version
---------- -------
pip 18.1
redis 3.3.11
setuptools 40.6.2
(pc369) [python@VM_0_11_centos pc1]$ pip freeze > requirements #冻结所有的库并导出环境
(pc369) [python@VM_0_11_centos pc1]$ cat requirements
redis==3.3.11
3、将其他环境的目录导出的冻结的环境导入其他环境中(从requirements文件中读取环境并安装)
(pc13.6.9) [python@VM_0_11_centos pc2]$ pip list
Package Version
---------- -------
pip 18.1
setuptools 40.6.2
(pc13.6.9) [python@VM_0_11_centos pc2]$ pip install -r ../pc1/requirements
(pc13.6.9) [python@VM_0_11_centos pc2]$ pip list
Package Version
---------- -------
pip 18.1
redis 3.3.11
setuptools 40.6.2
六、安装ipython和jupyter
6.1、ipython
- 是一个增强的交互式python命令行工具
#安装
pip install ipython
运行库的时候,需要在安装此包的路径下运行,不要报错找不到命令
(daizhe666) [python@centos7 web]$ ipython #运行ipython
Python 3.6.6 (default, Apr 9 2019, 23:35:27)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
6.2、jupyter常用命令
jupyter常用命令
一)临时修改启动设置
jupyter notebook --ip=0.0.0.0 --no-browser --allow-root --notebook-dir=/home/python/jupyter-notebook
--ip:指定为0.0.0.0表示可以远程访问,如果我需要在本地访问服务器上的jupyter就需要指定ip,否则本地访问不了。
--allow-root:root用户启动jupyter需要指定这个参数
--notebook-dir:指定启动jupyter的目录
二)永久生效
打开cmd(linux打开命令行),执行
jupyter notebook --generate-config
将在当前路径下生成一个文件: jupyter_notebook_config.py
(linux会在/root/.jupyter/下面你生成一个.py文件)
C:\Users\sheng> jupyter notebook --generate-config
Writing default config to: C:\Users\sheng\.jupyter\jupyter_notebook_config.py
根据需要进行修改,如修改启动目录:
## The directory to use for notebooks and kernels.
#c.NotebookApp.notebook_dir = ''
其他可以修改远程访问地址,端口,登录密码等。
6.3、linux安装jupyter
- 是基于WEB的交互式笔记本,其中可以非常方便的使用python
- 安装jupyter,也会安装ipython的
1、安装
~]$ pip install jupyter
2、查看命令帮助
~]$ jupyter notebook help
(daizhe666) [python@centos7 web]$ jupyter notebook --ip=0.0.0.0 --port=8888
~]# ss -tnl
*:8888
6.4、windows安装jupyter
#查看命令帮助
jupyter notebook -help
#启动前设置目录,避免使用token
jupyter notebook password
python
python
#指定监听地址和端口并启动
jupyter notebook --ip=0.0.0.0 --port=8888
6.5、jupyter常用快捷键
常用快捷键
a之前插入代码块、b之后插入代码块
L 增加行号
运行代码块 shift + enter,选择下面的代码块
运行当前代码块 ctrl + enter
向往的地方很远,喜欢的东西很贵,这就是我努力的目标。