本文讲解python包的安装、发布以及依赖管理,并介绍python虚拟环境的搭建。
Pypi
可以登录该网站,查找所需要的包,避免重复开发,提高效率。
该网站是python包的共享中心,全世界的python开发者都可以分享、下载python包。可能正是因为pypi的存在,才使python受众如此之高。
pip
要想从pypi安装python包,就要用pip命令。有些系统如MacOS可能需要输入pip3。
pip install requests
升级pip版本:
pip install –upgrate pip
查看已安装的包:
pip list
安装特定的版本:
pip install requests==2.9.0
安装2.9版本的最新版
pip install requests==2.9.*
卸载requests包:
pip uninstall requests
安装大于等于2.9.0的requests最新版:
pip install requests~=2.9.0
使用requests:
import requests
response = requests.get(“https://www.baidu.com”)
print(response)
# 输出<Response [200]>
虚拟环境
使用方法:
python3 -m venv env
env是目录名,执行了上面命令后,env目录下生成以下这些:
- pyvenv.cfg文件,指定python解释器位置及版本。
- bin目录(windows是scripts),一些执行的工具。
- lib/site-packages,包含软件包,隔离环境,使用的包全在这个位置。
激活:
source env/bin/activate
(windows系统的话,用:env/scripts/activate.bat)
停止:
deactivate
pipenv
有了pipenv,基本可以不用pip和虚拟环境了。
安装:
pip install pipenv
使用:
pipenv install requests
在当前目录下生成Pipfile和Pipfile.lock文件
pipenv –venv
检查pipenv,可以看到虚拟环境的路径,它不在当前目录下。一般是用户主目录下某个子目录。比如在我的环境下,该目录是
/home/kelemi/.local/share/virtualenvs/learn_python_1-cMem2shd
激活:
pipenv shell
激活后能看到项目提示符被括号包起来。
停止:
exit
在vscode中设置虚拟环境的解释器:
右下角选择对应虚拟环境的解释器即可。
用pipenv安装包时,会在目录下生成Pipfile和Pipfile.lock文件,用于跟踪项目的依赖关系和版本。
Pipfile:
- source:安装的包的来源
- dev-packages:开发中使用的包,一般为空
- packages:依赖的包,如requests=”*” ,* 表示最新版本,不用特定的版本。
- requires:python的版本等。
而Pipfile.lock,则是确切的依赖关系及版本。
当开发环境的源码复制到生产环境时,通过Pipfile.lock文件可以精确还原依赖包,减少差异,提高成功部署的概率。
在生产环境中,我们只需输入:
pipenv install
不加任何参数,会根据Pipfile建立虚拟环境。可以使用pipenv –venv检查。
生产环境建立的版本可能会高于开发版本。
如果我们希望生产环境与开发环境的版本完全一致,则可以通过添加 ignore-pipfile参数实现。
pipenv install –ignore-pipfile
管理依赖项:
pipenv graph
查询依赖情况。
我们可以更新符合要求的包。以requests为例,比如Pipfile写的版本是2.9.*,那么即便现在有2.27.1版本也不会更新。如果要更新的话,需将Pipfile中的requests版本改成2.*。
pipenv install requests==2.9.*
pipenv update –outdated
列出符合要求的包
pipenv install requests
即便有最新的2.27.1也不会安装,除非修改Pipfile中request版本为2.*
发布包
我们可以发布python包,分享给其他人使用。具体如何做呢?
首先得在pypi.org有一个账号,没有的话注册也很方便。
安装一些必要的包:
pip install setuptools wheel twine
我们来发布一个示例包名为kelemipdf。
mkdir kelemipdf
cd kelemipdf
code .
作为最佳实践,我们再在kelemipdf文件夹下新建同名kelemipdf文件夹,以及data、tests文件夹。
在kelemipdf下添加 __init__.py文件和pdf2text.py、pdf2image.py文件
再键入一些代码,pdf2text.py:
def convert():
print(“pdf2text”)
pdf2image.py:
def convert():
print(“pdf2image”)
为了能将包发布到pypi.org,需要添加3个文件:安装文件setup.py、自述文件和许可协议文件。
setup.py:
from pathlib import Path
import setuptools
setuptools.setup(
name=”kelemipdf”,
version=1.0,
long_description=Path(“readme.md”).read_text(),
packages=setuptools.find_packages(exclude=[“test”,”data”])
)
自述文件readme.md:
This is the homepage of our project.
许可协议license.txt:
可以到choosealicense.com选择某个协议并复制过来。
运行以下命令:
python3 setup.py sdist bdist_wheel
构建发布包,生成2个目录,dist和build。
形成的文件结构如下:
再将dist目录下的内容上传到pypi,注意用实际的用户名密码替换下面的命令。
twine upload -u username -p password dist/*
成功上传之后,可以访问pypi.org,查找kelemipdf,能看到相关信息。这样全世界的python程序员都可以复用你发布的包,是不是很酷!!
安装也是简单的,只需执行:
pip install kelemipdf
即可安装好这个包。我们新建代码测试。
from kelemipdf import pdf2text, pdf2image
pdf2text.convert()
pdf2image.convert()
# 输出
# pdf2text
# pdf2image
模块文档说明Docstrings
发布到pypi的模块供其他人使用,需要说明如何使用。其实非常简单,用三引号包含说明写在模块里就行,以pdf2text为例:
“””
This module provides functions to convert a pdf to text
“””
def convert(path):
“””
convert the given pdf to text
paremeters:
path(str):The path to a pdf file.
returns:
str:The content of the pdf file as text
“””
print(“pdf2text”)
重新生成及上传,注意修改setup.py中版本号,比如改成1.1。否则上传可能会提示文件已存在而出错。
这样之后,安装该包的用户调用时就能看到用法说明。
Pydoc
pydoc可以查看模块的帮助。比如查看math用法
pydoc math
可以生成html文档查看。
pydoc -w kelemipdf.pdf2text
pydoc -w math
-w 参数表示生成同名的html文件。
我们也可以启动web服务查看。
pydoc -p 1234
将在本机1234端口启动web服务,然后访问即可查看模块文档
http://localhost:1234
在windows系统中,可以通过以下方法调用pydoc
python -m pydoc math
小结
本文详细介绍了python中包的管理,包括安装第三方包,搭建虚拟环境,管理依赖项,发布包等知识。
下一篇计划:介绍流行的python第三方包的使用,比如调用API,网页抓取,浏览器自动化,PDF文件,Excel文件编程等,敬请期待。