Virtualenv是一个能创建隔绝的独立的Python虚拟环境工具。它能够建立多个相互独立,互不影响的Python工作环境
用来创建一套独立于系统Python环境的虚拟环境,在虚拟环境下,使用pip安装的依赖都会安装到当前的虚拟环境中,对系统的python环境没有影响
当开发多个Python程序时当,程序1要使用3.6环境,但是程序2要使用3.8环境时,Virtualenv可以完美解决这个问题
Windows pip install virtualenvwrapper-win
使用pip安装Virtualenv
pip3 install virtualenv
然后创建一个Virtualenv虚拟环境
virtualenv webpy #webpy为虚拟环境目录名,目录名自定义
virtualenv -p python环境路径 虚拟环境名 #创建指定Python环境路径的虚拟环境
virtualenv –no-site-packages 虚拟环境名 #创建一个干净的Python虚拟环境,系统Python环境的所有第三方包不会复制过来
virtualenv –no-site-packages –python=版本名 虚拟环境名 #创建一个指定python版本的虚拟环境
workon # 输出所有虚拟环境名 Windows
workon 虚拟环境名 # 进入虚拟环境 Windows
source 文件夹路径 # 激活当前virtualenv并进入虚拟环境
或者进入虚拟环境目录的bin目录,输入source activate
Windows是在虚拟环境目录下的Scripts目录,输入activate
deactivate # 退出当前环境
在虚拟环境下,使用pip安装的所有第三方包都会安装到当前的虚拟环境中,不会对系统的Python环境进行"污染"
想要删除某一个虚拟环境时,只需要将虚拟环境的目录删除
pip使用国内源
清华:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:http://pypi.douban.com/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
临时使用 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
linux下
配置永久使用
cd ~ # 进入用户目录 mkdir .pip # 新建一个隐藏文件夹 touch pip.conf # 新建一个文件 nano pip.conf # 编辑文件,这里使用nano,可以使用其他编辑器,例如vim
在文件中添加 [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
windows下
配置永久使用
在user目录下创建一个pip目录
在该目录新建一个pip.ini文件
在文件中添加 [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = pypi.tuna.tsinghua.edu.cn
jupyter
最简单的安装方法就是使用python的科学计算包—-Anaconda
该发行版中包含了大量的科学包,其中就附带了jupyter
可以通过 pip 来安装 pip install jupyter notebook
启动notebook服务器也很简单,在终端使用jupyter notebook命令就可以了‘’
服务器的默认地址是http://localhost:8888
通过点击“New”,来新建文件夹或者文档
通过ctrl+c来关闭服务器
修改jupyter默认工作路径
在终端使用jupyter notebook –generate-config
输出一个路径的文件,修改这个文件
找到#c.NotebookApp.notebook_dir = ''
修改成c.NotebookApp.notebook_dir = ‘你想要修改到的那个工作目录的路径’
这个工作目录必须提前创建好,否则可能出现闪退
修改默认浏览器
同样在终端使用jupyter notebook –generate-config
如果你已经知道这个文件在哪里可以不用,这个命令只是让我们找到jupyter的配置文件,jupyter_notebook_config.py
找到#c.NotebookApp.notebook_dir = ''
在它的后面加入
import webbrowser
webbrowser.register(
"Microsoft Edge",
None,
webbrowser.GenericBrowser(u""C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"")
)
c.NotebookApp.browser = "Microsoft Edge"
路径要修改为浏览器的路径
conda
conda有两个,一个是anaconda,另一个是miniconda
anaconda是集成(包含)了一些科学计算包,而miniconda是你要用什么就装什么
Miniconda 是一个 Anaconda 的轻量级版本,默认只包含了 python 和 conda,但是可以通过 pip 和 conda 来安装所需要的包。
这里安装的minicoda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
如果是新机器,一路yes就可以了
创建环境
conda create –name webpy python=3.7 // 建立一个名叫py37的环境,指定Python版本为Python3.7的最新版本
激活环境
activate webpy // 用于Windows系统 source activate webpy // 用于mac或者linux系统
python –version // 检查Python版本
退出当前环境 deactivate webpy // 用于Windows系统 source deactivate webpy // 用于mac或者linux系统
conda remove –name webpy –all // 删除指定环境
conda info -e // 查看系统的所有环境
conda install numpy // 安装numpy库
conda list // 查看已经安装好的库
conda list -n webpy // 查看指定环境已经安装好的库
conda install -n webpy numpy // 安装库到指定环境内
conda update -n webpy numpy // 指定环境更新指定库
conda remove -n webpy numpy // 删除指定环境中的指定库
conda update anaconda // 更新anaconda
conda update python // 更新Python
添加国内镜像来提升下载速度(使用清华镜像站)
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config –set show_channel_urls yes
docx模块(操作Word)
导入模块 from docx import Document from docx.shared import Inches
初始化Document对象 document = Document() Document(“1.docx”)
写入标题,段落样式由level控制,范围0到9,默认为1 document.add_heading(text=“hallo word”,level=9)
写入段落,段落样式由style控制 data = document.add_paragraph(text=“https://xiaochenabc123.test.com/",style=None)
插入段落到现有段落中,段落样式由style控制 data.insert_paragraph_before(text=“abcxyz”,style=None)
插入图片,并且缩小图片英寸为1.6 document.add_picture(“1.jpg”,width=Inches(1.6))
插入表格,rows是指定行数,cols是指定行数,style为表格样式 table = document.add_table(rows=1,cols=3,style=“Table Grid”)
插入列表中第一行的单元格
maincells = table.rows[0].cells maincells[0].text = “id” maincells[1].text = “user” maincells[2].text = “pass”
初始化 data_cells =( [1,“root”,“a”], [2,“admin”,“b”], [3,“user”,“c”] )
写入 for item in data_cells: maincells_rows = table.add_row().cells maincells_rows[0].text = str(item[0]) maincells_rows[1].text = item[1] maincells_rows[2].text = item[2]
保存 document.save(“hallo.docx”)
docx样式
导入模块
from docx import Document from docx.shared import Pt from docx.shared import RGBColor from docx.oxml.ns import qn
初始化Document对象 document = Document(“1.docx”)
插入页眉 header = document.sections[0].header
header.add_paragraph(“hallo python”)
插入页脚 footer = document.sections[0].footer
footer.add_paragraph(“hallo word”)
样式 p1 = document.add_paragraph() text1 = p1.add_run(“hallo WORD,hallo python-docx,你好,世界”)
字体大小 text1.font.size = Pt(16)
字体是否加粗 text1.bold = True
字体 text1.font.name = “黑体”
字体(只能设置中文) text1.element.rPr.rFonts.set(qn(“w:eastAsia”), “黑体”)
字体颜色 text1.font.color.rgb = RGBColor(0, 0, 255)
斜体 text1.italic = True
下划线 text1.underline = True
保存 document.save(“hallo.docx”)
xlrd模块+xlwt模块(操作xlsx)
注意:xlrd模块只有低于或等于1.2.0版本才能操作xlsx文件,高于该版本只支持xls文件,或者使用openpyxl代替xlrd模块
导入xlrd模块 import xlrd
加载1.xlsx data = xlrd.open_workbook(“1.xlsx”)
判断是否加载成功,可以指定第几张工作表,0为第一个工作表 print(data.sheet_loaded(0)) #True
卸载指定工作表 data.unload_sheet(0)
输出全部工作表名字(Sheet) print(data.sheet_names())
输出工作表的数量 print(data.nsheets)
输出全部所有sheet对象 print(data.sheets())
将指定工作表索引到变量中 main = data.sheet_by_index(0)
名字索引到变量中 main = data.sheet_by_name(“Sheet1”)
输出工作表名字 print(main.name)
输出工作表有效总行数 print(main.nrows)
输出工作表有效总列数 print(main.ncols)
输出工作表有效总列数 print(main.row_len(1))
输出单元格值类型和内容 print(main.row(0))
数据类型: 空:0 字符串:1 数字:2 日期:3 布尔:4 error:5
输出第1行第二列的单元格内容 print(main.row(0)[1].value)
输出第二列表的全部内容 print(main.col(1))
输出第一行的内容 print(main.row_values(0))
输出单元格数据类型 print(main.row_types(0))
输出第一列的内容 print(main.col_values(0))
输出第二列的数据类型 print(main.col_types(1))
输出第6行第一列内容和数据类型 print(main.cell(5,0))
输出第6行第一列内容的数据类型 print(main.cell(5,0).ctype)
输出第6行第一列内容 print(main.cell(5,0).value)
利用xlwt模块写
导入xlwt模块 import xlwt
xlwt模块不支持xlsx,只支持xls
新建workbook,字符集为utf-8 hallo = xlwt.Workbook(encoding=“utf8”)
新建sheet abc = hallo.add_sheet(“Sheet1”)
第1行到第3行和第1列到第9列合并并且写入hallo word abc.write_merge(0,2,0,8,“hallo word”)
在第4行第1列写入hallo word abc.write(3,0,“hallo word”)
批量写入 data = ((1,“hallo”,“abc”,“xyz”,123),(1,“hallo”,“abc”,“xyz”,123))
for i,a in enumerate(data):
for q,s in enumerate(a):
abc.write(i,q,s)
在第1行第1列写入图片,只支持bmp格式 abc.insert_bitmap(“1.bmp”, 0, 0)
保存 hallo.save(“hallo.xls”)
样式
初始化 style = xlwt.XFStyle()
初始化样式 stylefont = xlwt.Font()
名称 stylefont.name = “宋体”
加粗 stylefont.bold = True
字号 stylefont.height = 11*20
字体颜色,注意不是RGB颜色,而是在xlwt内部定义的 stylefont.colour_index = 0x0A
style.font = stylefont
初始化Alignment align = xlwt.Alignment()
水平对齐方式 align.vert = 0x01
垂直对齐方式 align.horz = 0x00
应用对齐方式 style.alignment = align
水平对齐方式 0x01(左端对齐) 0x02(水平居中对齐) 0x03(右端对齐)
垂直对齐方式 0x00(上端对齐) 0x01(垂直居中对齐) 0x02(底部对齐)
初始化Borders borders = xlwt.Borders()
指定边框样式 borders.right = xlwt.Borders.DASHED
应用边框 style.borders = borders
top 上边框 bottom 下边框 left 左边框 right 右边框
DOTTED 点线 DASHED 虚线
初始化Pattern color = xlwt.Pattern()
填充模式为完全填充 color.pattern = xlwt.Pattern.SOLID_PATTERN
填充黑色 color.pattern_fore_colour = 0
应用 style.pattern = color
应用style abc.write_merge(0,2,0,8,“hallo word”,style)
xlrd和xlwt使用起来不是很好,而且xlwt模块不支持xlsx,因此不详细写,openpyxl才是王道
Celery是一个基于Python开发的分布式任务调度模块
安装
pip install celery[redis]
如果需要redis消息中间件的话,也可以选择RabbitMQ
easy_install是一个基于setuptools的工具,可以用来下载,编译,管理Python的包
官网:http://peak.telecommunity.com/DevCenter/EasyInstall
安装setuptools就会安装easy_install
pip install setuptools
或者通过ez_setup.py来安装
https://pypi.org/project/ez_setup/
下载ez_setup.py的源程序
安装easy_install: python ez_setup.py
更新easy_install: python ez_setup.py –U setuptools
安装包
easy_install Virtualenv
也可以通过url来安装
将已经安装的到pypl上最新版本
easy_install –upgrade PyProtocols
更新包
easy_install “Virtualenv==x.x”
或者要求版本大于某个版本:
easy_install “Virtualenv>x.x”
查找PyPI上的最新可用版本
easy_install –upgrade Virtualenv
删除包
只需要删除包名版本的.egg文件或者目录,如果不想继续使用删除的包,然后easy_install -mxN 包名
Python内置多线程库threading
进程是资源分配的最小单位,一个程序必须至少有一个进程,一个进程必须至少有一个线程
线程是程序执行的最小单位,多线程是可以有效加速程序计算
进程的资源独立(独立内存,地址空间等等),而线程是可以共享进程中的数据的(IPC),同一个进程下的线程,共享使用相同的地址空间(全局),但是也存在数据同步和互相排斥的问题
导入threading模块
import threading
查看全部正在运行的线程信息(不包括没启动或者已经终止的线程)
threading.enumerate()
查看正在运行的线程的数量
threading.active_count()
查看正在运行的线程信息
threading.current_thread()
添加线程(需要接受target参数,该参数指向这个线程要完成的任务)
threading.Thread(target=xxx)
启动线程
thread.start()
终止线程(会等待线程终止)
thread.join()
简单的例子:
import threading
def funs(name,data):
print("hallo",name,data)
a1 = threading.Thread(target=funs, args = ("root",666))
a1.start()
a1.join()
执行后如果看到hallo root 666就说明已经执行线程成功了
线程锁Lock
同一进程下的线程是可以共享内存的,而Lock是保证多线程之间不会出现内存被乱改或者没有同步,多线程在执行修改内存后,进行lock.acquire()共享内存上锁,执行完毕在解锁lock.release()
Python多进程库multiprocessing
multiprocessing库用法和threading类似,例如:
import multiprocessing def funs(name,data): print(“hallo”,name,data) if name==’main’: a1 = multiprocessing.Process(target=funs, args = (“root”,666)) a1.start() a1.join()
进程池 Pool(进程池就是将需要完成的任务,放到该进程池中,由Python自己解决多进程问题)
例如:
import multiprocessing
def demo(x):
return x+x
def funs():
pool = multiprocessing.Pool()
data = pool.map(demo, range(3))
print("hallo",data)
if __name__=='__main__':
funs()
Pool自定义需调用核数量(默认为CPU的核数)
pool = multiprocessing.Pool(processes=4)
进程锁和线程锁用法一样,就不写了