01-Python入门之语言发展和环境安装

一、Pyhon 作者介绍

image

  • 荷兰人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和和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

四、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的家目录,在"运行"中键入"."
    image
    image
阿里云镜像站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

image
image
image
image
image
image
image

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

image
image
image

6.4、windows安装jupyter

#查看命令帮助
    jupyter notebook -help
 
 
#启动前设置目录,避免使用token
    jupyter notebook password
        python
        python
 
#指定监听地址和端口并启动
jupyter notebook --ip=0.0.0.0 --port=8888

image

6.5、jupyter常用快捷键

常用快捷键
    a之前插入代码块、b之后插入代码块
    L 增加行号
    运行代码块 shift + enter,选择下面的代码块
    运行当前代码块 ctrl + enter
posted @ 2021-04-27 23:18  SRE运维充电站  阅读(118)  评论(0编辑  收藏  举报