当前位置: 首页>大数据>正文

(六)python环境管理及三方库

一、venv环境管理

1、 venv 虚拟环境的优点

  • 独立的 Python 环境,不会产生冲突
  • 有助于包的管理
  • 删除和卸载方便

2、venv 使用方法

  • 创建虚拟环境
  • 激活虚拟环境
  • 安装 Python 包

2.1 venv 创建虚拟环境

  • 执行指令
python3 -m venv test

2.2 venv 激活虚拟环境

  • 切换指定件夹
    • Windows:/Scripts/
    • macOS:/bin/
  • 执行指令:activate
# Windows 系统激活虚拟环境
cd test
cd Scripts
activate

# macOS系统激活虚拟环境
cd test
cd bin
source actiavte
# 或者一步到位
source ./test/bin/acitvate

2.3 venv 安装 Python 包

  • Python 版本选择
    • 进入 python2.7 环境:python2
    • 进入 python3.x 环境: python3
  • pip 安装 Python 包
    • 安装 Python2.x 版本的包
    • 安装 Python3.x 版本的包
# 进入 python2.7 环境
python2

# 进入 python3.x 环境
python3

# 安装 Python2.x 版本的包
pip install xxx

# 安装 Python3.x 版本的包
pip3 install xxx

2.4venv 退出和删除

  • 退出虚拟环境:deactivate
  • 删除虚拟环境:删除环境目录
# Windows和macOS通用的退出指令
deactivate

3、pyenv安装

  • pyenv:python的多版本安装工具
  • pyenv地址:https://github.com/pyenv/pyenv-installer
  • 安装命令(Mac): curl https://pyenv.run | bash
  • 安装python:
    • pyenv install -l (查看所有python版本)
    • pyenv install 2.7.14
    • pynv install 3.7.0
    • pyenv install python-2.7.1

3.1指定使用版本

  • 查看当前使用版本:pyenv version
  • 查看所有版本:pyenv versions
  • 指定全局版本:pyenv global 3.7.0
  • 本地设置,只影响当前文件夹:pyenv local 2.7.14

3.2Python环境隔离VirtualEnv

  • virtualenv --no-site-packages venv
  • . venv/bin/active
  • pip install selenium

模块

生成一个模块

curl http://www.baidu.com > baidu.html
python2 -m CGIHTTPServer
# python3 -m http.server

二、pip环境管理

pip 概述

  • pip 是 Python 包管理工具
    • python2 的 2.7.9 版本开始自带
    • python3 的 3.4 版本开始自带
  • https://pypi.org/ 托管了大量流行的 Python 包

pip 常用命令

功能 指令
查看 pip 版本 pip -V
查看帮助文档 pip help
查看包列表 pip list
导出包列表 pip freeze
安装 pip install 包名
升级 pip install -U 包名
卸载 pip uninstall 包名

pip 安装包

  • 普通安装
  • 指定版本
  • 从文件中安装
# 默认安装最新版本
$ pip install pytest

# 执行版本
$ pip install pytest==6.2.0

# 从文件清单中批量安装
$ pip install -r requirments.txt

# 文件格式
pytest==6.2.0
Faker==9.3.1
selenium==3.14.1

pip 升级包

  • 升级已安装的 Python 包
$ pip install -U pytest

pip 卸载包

  • 卸载 Python 包
# 卸载包

$ pip uninstall pytest

pip 使用镜像加速

  • pip install -i 镜像源

  • 国内常用源

    • 阿里源:https://mirrors.aliyun.com/pypi/simple/
    • 清华源:https://pypi.tuna.tsinghua.edu.cn/simple/
    • 豆瓣源:http://pypi.douban.com/simple/
    # 使用镜像
    
    pip install pytest -i https://pypi.douban.com/simple
    

三、常用第三方库yaml

1、YAML

  • 一种数据序列化格式
  • 用于人类的可读性和与脚本语言的交互
  • 一种被认为可以超越 XML、JSON 的配置文件

2、YAML 基本语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用 Tab 键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略

3、YAML 支持的数据结构

  • 对象:键值对的集合,用冒号 “:” 表示
  • 数组:一组按次序排列的值,前加 “-”
  • 纯量:单个的、不可再分的值
    • 字符串
    • 布尔值
    • 整数
    • 浮点数
    • Null
    • 时间
    • 日期
# 编程语言
languages:
  - PHP
  - Java
  - Python 
book:
  Python入门: # 书籍名称
    price: 55.5
    author: Lily
    available: True
    repertory: 20
    date: 2018-02-17
  Java入门:
    price: 60
    author: Lily
    available: False
    repertory: Null
    date: 2018-05-11

4、PyYAML

  • Python 的 YAML 解析器和生成器
  • 官网:https://pypi.org/project/PyYAML/
  • 安装:pip install pyyaml

4.1创建 yaml 文件

import yaml

data = {
    "client": {"default-character-set": "utf8"},
    "mysql": {"user": 'root', "password": 123},
    "custom": {
        "user1": {"user": "张三", "pwd": 666},
        "user2": {"user": "李四", "pwd": 999},
    }
}
# 直接 dump 可以把对象转为 YAML 文档
with open('./my.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(data, f, allow_unicode=True)

4.2读取 yaml 文件

import yaml

file_path = './my.yaml'

with open(file_path, 'r', encoding='utf-8') as f:
    data = yaml.safe_load(f)
print(data)

四、常用第三方库pymysql

1、pymysql 概述

  • Python 的数据库接口标准是 Python DB-API

  • PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口

  • PyMySQL 的目标是成为 MySQLdb 的替代品

  • 官方文档:http://pymysql.readthedocs.io/

2、pymysql 安装

  • 使用 pip 安装
  • 使用 Pycharm 界面安装
pip install pymysql

3、pymysql 连接数据库

  • host:MySQL 服务器地址
  • user:用户名
  • password:密码
  • database:数据库名称
  • charset:编码方式,推荐使用 utf8mb4
# 1.导入库
import pymysql

# 2.建立连接
conn = pymysql.connect(host='服务器地址',
                     user='用户名',
                     password='密码',
                     database='数据库名',
                     charset="utf8mb4")
# 3.关闭连接
conn.close()

pymysql 连接数据库

  • 封装获取连接的函数
import pymysql

# 1.封装建立连接的对象
def get_conn():
    conn = pymysql.connect(
        host="服务器地址",
        user="root",
        password="123456",
        database="数据库名",
        charset="utf8mb4"
    )

    return conn

pymysql 入门实例

  • 获取连接对象
    • 打开
    • 关闭
  • 获取游标对象
    • 执行 SQL
    • 查询记录
from . import get_conn

def test_demo():
    # 1.获取连接对象
    conn = get_conn()
    # 2.获取游标对象
    cursor = conn.cursor()
    # 3.执行SQL
    cursor.execute("SELECT VERSION()")
    # 4.查询结果
    version = cursor.fetchone()
    print(f"数据库的版本是:{version}")
    # 5.关闭连接
    conn.close()

pymysql 数据库操作

  • CRUD 操作
    • 创建表
    • 插入记录
    • 查询记录
    • 更新记录
    • 删除记录
  • 执行事务
    • 提交:commit
    • 回滚:rollback

pymysql 创建表

  • 创建表 testcase
from . import get_conn

def test_create():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """
    CREATE TABLE `testcase` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `title` varchar(255) COLLATE utf8_bin NOT NULL,
    `expect` varchar(255) COLLATE utf8_bin NOT NULL,
    `owner` varchar(255) COLLATE utf8_bin NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
    """
    cursor.execute(sql)  # 执行SQL
    conn.close()  # 关闭连接

pymysql 插入操作

  • 插入记录
from . import get_conn

def test_insert():

    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
    (id, title, expect, owner)
    values (1, 'S11总决赛', '冠军', 'EDG');
    """

    cursor.execute(sql)  # 执行SQL
    conn.commit()  # 提交

执行事务

  • 提交操作:commit()
  • 回滚操作:rollback()
  • try-catch-finally
from . import get_conn

def test_insert():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
    (id, title, expect, owner)
    values (2, 'S11全球总决赛', '冠军', 'EDG');
    """
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

pymysql 查询操作

  • 查询操作
    • fetchone():获取单条记录
    • fetchmany(n):获取 n 条记录
    • fetchall():获取所有结果记录
import sys
from . import get_conn

def test_retrieve():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "SELECT * FROM testcase;"
    # 捕获异常
    try:
        cursor.execute(sql)  # 执行SQL
        record = cursor.fetchone()  # 查询记录
        print(record)
    except Exception as e:
        print(sys.exc_info())  # 打印错误信息
    finally:
        conn.close()  # 关闭连接

pymysql 更新操作

  • 更新数据表的数据
from . import get_conn

def test_update():
    conn = get_conn()
    cursor = conn.cursor()
    sql = "UPDATE testcase SET owner='hogwarts' WHERE id=2;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

pymysql 删除操作

  • 删除数据表的数据
from . import get_conn

def test_delete():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "DELETE FROM testcase WHERE id=3;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

五、常用第三方库urllib3

1、urllib3 概述

  • 内置模块

    • urllib
  • 第三方库

    • requests

    • urllib3

  • 线程安全
  • 连接池管理
  • 客户端 SSL/TLS 验证
  • 支持 HTTP 和 SOCKS 代理

官方文档:https://urllib3.readthedocs.io/en/stable/

2、urllib3 安装

  • 通过 pip 安装

pip install urllib3

3、urllib3 发送 HTTP 请求

  • 导入 urllib3 模块
  • 创建 PoolManager 实例
  • 调用 request() 方法
import urllib3

def test_HTTP():
    # 创建连接池对象,默认会校验证书
    pm = urllib3.PoolManager()
    # 发送HTTP请求
    res = pm.request(method='GET', url="http://httpbin.org/robots.txt")

    print(type(res))

3.1 urllib3 HTTPResponse 对象

  • status 属性
  • headers 属性
  • data 属性
import urllib3

def test_response():
    # 创建连接池对象
    pm = urllib3.PoolManager()
    # 发送请求
    resp = pm.request(method='GET', url="http://httpbin.org/ip")

    print(resp.status)  # 查看响应状态状态码
    print(resp.headers)  # 查看响应头信息
    print(resp.data)  # 查看响应原始二进制信息

3.2 urllib3 解析响应内容

  • 二进制响应内容解码

  • JSON 字符串

import urllib3
import json

def test_response():
    pm = urllib3.PoolManager()
    resp = pm.request(method='GET', url="http://httpbin.org/ip")

    # 获取二进制形式的响应内容
    raw = resp.data
    print(type(raw), raw)
    # 使用utf-8解码成字符串
    content = raw.decode('utf-8')
    print(type(content), content)
    # 将JSON字符串解析成字典对象
    dict_obj = json.loads(content)
    print(type(dict_obj), dict_obj)
    print(dict_obj['origin'])

4、urllib3 request 请求参数

  • 语法:request(method, url, fields, headers, **)
  • 必填
    • method:请求方式
    • url:请求地址
  • 选填
    • headers:请求头信息
    • fields:请求体数据
    • body:指定请求体类型
    • tiemout:设置超时时间

5、urllib3 定制请求数据

  • 定制请求头信息

5.1使用 headers 参数

import urllib3
import json

def test_headers():
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/get"

    # 定制请求头
    headers = {'School': 'hogwarts'}
    resp = pm.request('GET', url, headers=headers)

5.2定制查询字符串参数
* fields 参数:适用于GET, HEAD, DELETE 请求
* 拼接url:适用于POST, PUT请求

import urllib3
import json

# GET/HEAD/DELETE 请求
def test_fields():
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/get"
    fields = {'school': 'hogwarts'}
    resp = pm.request(method='GET', url=url, fields=fields)

# POST/PUT 请求
def test_urlencode():
   # 从内置库urllib的parse模块导入编码方法
    from urllib.parse import urlencode
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/post"
    # POST和PUT请求需要编码后拼接到URL中
    encoded_str = urlencode({'school': 'hogwarts'})
    resp = pm.request('POST', url=url+"?"+encoded_str)

5.4提交 form 表单数据

  • 类型 'Content-Type': 'multipart/form-data

  • 请求方式:POST、PUT

import urllib3
import json

# POST/PUT 请求
def test_form():
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/post"
    fields = {'school': 'hogwarts'}

    # fields数据会自动转成form格式提交
    resp = pm.request('POST', url, fields=fields)

5.5提交 JSON 格式数据

  • 类型:'Content-Type': 'application/json'

  • 请求方式:POST、PUT

import urllib3
import json

def test_json():
    pm = urllib3.PoolManager()
    url = "http://httpbin.org/post"

    # 设定请求体数据类型
    headers={'Content-Type': 'application/json'}

    # JSON文本数据
    json_str = json.dumps({'school': 'hogwarts'})
    resp = pm.request('POST', url, headers=headers, body=json_str)

5.6timeout :设置超时时间

  • 时间单位:秒

  • 值的格式:float 类型

import urllib3

def test_timeout():
    pm = urllib3.PoolManager()
    # 访问这个地址,服务器会在3秒后响应
    url = "http://httpbin.org/delay/3"

    # 设置超时时长
    resp = pm.request(method='GET', url=url, timeout=4.0)
    assert resp.status == 200

6、urllib3 发送 HTTPS 请求

  • HTTPS 请求默认需要校验证书

  • PoolManager 的 cert_reqs 参数

    • "CERT_REQUIRED":需要校验
    • "CERT_NONE":取消校验
import urllib3
import json

def test_HTTPS():
    # 创建不校验证书的连接池对象
    pm_https = urllib3.PoolManager(cert_reqs="CERT_NONE")
    url = "https://httpbin.ceshiren.com/get"

    # 发送HTTPS请求
    resp = pm_https.request(method='GET', url=url)
    print(json.dumps(resp.data.decode('utf-8')))


https://www.xamrdz.com/bigdata/7nq1994766.html

相关文章: