完全掌握Python(八)

本文讲解python包的安装、发布以及依赖管理,并介绍python虚拟环境的搭建。


Pypi

https://pypi.org

可以登录该网站,查找所需要的包,避免重复开发,提高效率。

该网站是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文件编程等,敬请期待。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注