python常用第三方包,可从这个地址查看:
- yaml
- pytest
- pysnooper
- attrs
- pydantic
-
pickle
python对于从git下载的内容,进入包内使用以下命令:
python setup.py build install
对于whl包,可省去后面的whl直接安装,假如有whl包是test123.whl
pip install test123
pip: 是 Python 包管理工具,python的其它包安装一般都是通过pip操作。python3.4+自带有此包。
pip install poetry --timeout=10000 -i https://pypi.tuna.tsinghua.edu.cn/simple
下载地址:https://pip.pypa.io/en/stable/installation/
参考使用:https://www.runoob.com/w3cnote/python-pip-install-usage.html
pip3 install --timeout=1000 greenlet==2.0.0 //通过双等号来添加指定版本
在python3中要使用pip3
yum install pip3 #apt-get install pip3
pyerz: 软著的代码提取工具。 参考网址: https://pypi.org/project/pyerz/
注意:如果使用pyerz无法识别命令,说明没有加入到环境变量path中,可查看安装时的path路径(不知道可卸载重装),执行找到安装位置移动到自己的目标地址。
import yaml:
pip install pyyaml或者 pip3 install pyyaml
yaml: yaml文件的读取解析
》pip3 install yaml
import yaml if __name__ == '__main__': file = open('test.yml', 'r') fileData = file.read() file.close() yml = yaml.load(fileData, yaml.Loader) print(yml['TEST'])
BeautifulSoup: xml,html的文件的读取解析
> pip3 install bs4
> pip3 install lxml //如果有xml文件解析的话需要(BeautifulSoup couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?)
from bs4 import BeautifulSoup if __name__ == '__main__': inpom = open("pom.xml").read() pom = BeautifulSoup(inpom, "xml")
zlib :大多情况下使用pip安装不上,只能手动安装
wget http://www.zlib.net/zlib-1.3.1.tar.gz ./Configure make && make install
pydantic (校验器):
import re from enum import Enum from typing import Literal from constants import * from pydantic import validator, Field, BaseModel, conlist, field_validator, ValidationError class GenderEnum(str, Enum): """ str 表示定义枚举类型,也可以不定义 """ male = '男' female = '女' class Person2(BaseModel): name: str = Field(min_length=2, max_length=10) age: int = Field(ge=6, le=16) phone: str = Field(min_length=11, max_lenght=11) gender2: conlist(item_type=str, min_length=1, max_length=10) # 对list数据的约束 gender3: GenderEnum gender: Literal['男', '女'] = Field(default='男') @field_validator("phone",mode='before') def valid_phone(ins): result = re.match("^\d{11}$",ins) if not result: raise ValueError("非有效电话号码") return str(ins) #mode=before先对数据进行str转化,防止str类型校验失败 def __str__(self): return f"Person name:{self.name}, age:{self.age}, phone:{self.phone}, gender:{self.gender}" try: # 带有pydantic的构造器,只能用关键字参数 # person1 = Person2(name="", age="", phone="",gender="", gender2="", gender3="") person2 = Person2(name="张三", age=12, phone=18191250000,gender2=["A","B"], gender3="男") except ValidationError as err: print(err)
attrs
# attrs from enum import Enum from typing import Optional from attrs import define, field, validators class GenderEnum(Enum): male = "男" female = "女" def mytest(value): gender = ("男", "女") if not gender.__contains__(value): raise ValueError("值仅可以选择在男/女中") @define class Person3: """ 注意点: 1. 所有的都需要设定type属性类型 2. 带有default的值要放在没有default的最后面,否则无效 """ name: str = field(validator=[validators.min_len(2), validators.max_len(10)]) age: int = field(validator=[validators.ge(6), validators.le(18)]) phone: Optional[int] = field(validator=validators.matches_re("^\d{11}$")) gender2:str = field(validator=[mytest]) gender: str = field(default='男') try: person = Person3(name="", age="", phone="", gender="", gender2="") except ValueError as err: print(err)
pytest:
import learn_test_def as test2 import tests.test2 as t2 import pytest @pytest.fixture def set_up(): print("开始测试") yield print("测试结束") def test_mytest(set_up): print("Start") assert test2.my_sub(1,2) == 3, "数据不等" assert t2.add(1,2) == 3, "数据不等"
pysnooper:
import pysnooper @pysnooper.snoop() def count_down(n): while n > 0: yield n n -= 1 count = count_down(10) for cn in count: print(cn)
pickle:
序列化和反序列化
import pickle list = ["AAA","BBB"] file = open("list","wb") pickle.dump(list, file) file.close() file = open("list","rb") list2 = pickle.load(file) file.close() print(list2)