Python Pip 基础教程 - 日常使用

yufei       5 年, 10 月 前       2416

前面的 Python Pip 基础教程 - 安装 我们详细介绍了如何安装 Pip,别看文章好长,其实讲解的都是废话,因为当前最新的版本已经内置了 Pip

唠叨了一大堆废话,本章节我们来讲讲如何使用 pip

运行 pip

pip 是一个命令行程序,安装 pip 时,会向系统添加一个 pip 命令,该命令可以在命令提示符运行,如下所示

$ pip <pip arguments>

注意 : 美元符号 $ 是命令行输入提示符,表示可以从这个位置输入一些命令

如果你在运行 pip 命令时报错了,原因可能是 pip 的安装位置不在操作系统的 PATH 上 ,那么可以通过Python 解释器运行 pip

$ python -m pip <pip arguments>

在 Windows 上,还可以使用 py 启动器

$ py -m pip <pip arguments>

pip 还可以作为一个可导入的模块 import pip 来使用,但我们强烈不建议以这种方式使用 pip

关于如何在 Python 代码中如何使用 pip 模块,可以参考 程序中使用 pip

安装第三方模块

pip 支持从从多种渠道安装第三方模块,比如 PyPI版本控制本地项目 以及分发文件

最常见的情况是使用 Requirement specifiers 从 PyPI 安装,也就是传说中的 requirements.txt 文件

安装最新的版本

$ pip install SomePackage

安装指定的版本

$ pip install SomePackage==1.0.4

安装最低的版本

$ pip install 'SomePackage>=1.0.4'

有关更多信息和示例,可以访问我们的 pip 安装参考

Requirements Files

「 Requirements Files 」是包含了要使用 pip install 命令安装的项目列表的文件,文件名一般为 requirements.txt

从 「 Requirements Files 」安装模块可以使用下面的命令

pip install -r requirements.txt

更多关于 requirements.txt 文件的格式,可以访问我们的 Requirements File Format

从逻辑上来说,Requirements 文件只是放在文件中的 pip 安装参数列表

请注意,当安装 Requirements 文件中的任意模块时,不应该依赖于 Requirements 中模块出现的先后顺序,也就是说,每个模块都应该自己安装依赖,且要避免出现重复依赖

实际上,Requirements 文件有四种用途

  1. Requirements 文件用于保存 pip freeze 命令运行的结果,以达到重复安装的目的。在这种情况下,Requirements 文件包含了运行 pip freeze 命令时所有固定版本的第三方模块

    pip freeze > requirements.txt
    pip install -r requirements.txt
    
  2. Requirements 文件用于强制 pip 正确解析依赖项。截至目前为止,pip 并没有包含真正的依赖解析解决方案,而只是简单的使用它能找到的模块的第一个规范

    例如,如果 pkg1 依赖于 pkg3 >= 1.0 并且 pkg2 依赖于 pkg3 >= 1.0,<= 2.0。如果首先解析 pkg1,则 pip 将仅使用 pkg3 >= 1.0 ,这就很容易安装与 pkg2 需求相冲突的 pkg3 版本

    为了解决此问题,我们可以将 pkg3 >= 1.0, <= 2.0 ( 即正确的规范 ) 作为一个单独的模块放入 Requirements 中

    pkg1
    pkg2
    pkg3>=1.0,<=2.0
    
  3. Requirements 文件可以强制 pip 安装子依赖项的备用版本

    例如,假如我们 Requirements 文件中的 ProjectA 模块依赖 ProjectB,但 ProjectB 最新的版本 ( v1.3 ) 有一个 bug。我们可以可以强制 pip 安装比当前最新版本低一个版本的 ProjectB

    ProjectA
    ProjectB<1.3
    
  4. Requirements 文件可以使用本地版本控制器中的补丁来修补依赖关系

    例如,假设一个依赖,从 PyPI 中安装的 SomeDependency 有一个 bug,但我们又等不及上游的修复。我们可以克隆或复制源代码,作出修复,然后放在本地的版本控制器中并打上一个标签 sometag,接下来我们就可以在 Requirements 文件中使用下面的代码来引用它

    git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency
    
    1. 如果 SomeDependency 以前在 Requirements 文件中是一个顶级依赖项,那么我们可以用上面这行代替它
    2. 如果 SomeDependency 是某个模块的子依赖项,则直接在新行处添加它即可

不管怎么样,最重要的是明确 pip 使用 install_requires 元数据 来确定包依赖关系,而不是简单的通过项目中的 requirements.txt 文件

什么是 install_requires 元数据

就是模块中的 setup.pyrequirestest_requirements 属性

就像 requestssetup.py 的那样

requires = [
    'chardet>=3.0.2,<3.1.0',
    'idna>=2.5,<2.8',
    'urllib3>=1.21.1,<1.24',
    'certifi>=2017.4.17'

]
test_requirements = ['pytest-httpbin==0.0.7', 'pytest-cov', 'pytest-mock', 'pytest-xdist', 'PySocks>=1.5.6, !=1.5.7', 'pytest>=2.8.0']

参考文档

  1. Requirements File Format

  2. pip freeze

  3. "setup.py vs requirements.txt" (an article by Donald Stufft)

约束文件

约束文件也是 Requirements 文件,但与 requirements.txt 不同的是,它仅用于控制安装哪个版本的模块,而不管该模块是否已经安装

约束文件的文件名一般为 constraints.txt

约束文件的语法和内容几乎与 Requirements 文件相同,只有一个关键区别

在约束文件中包含一个第三方包并不会触发该包的安装

当存在一个约束文件时,可以按照下面的命令来使用它

pip install -c constraints.txt

当我们不能确定要安装什么内容时,使用约束文件的理由看起来就和使用 requirements.txt 文件一样

例如,假设存在一个 helloworld 包,但该包在我们的环境中并不能正常使用,为此,我们必须有一个本地修补版本,但是呢,我们安装的某些包会依赖 helloworld 包,但另外一些则不依赖

要确保所有这些包一致使用修补版本的方法之一是手动审核您安装的所有内容的依赖关系,如果存在 「 helloworld 」,则添加一个该内容被安装时需要用到的 requirements.txt 文件

约束文件提供了一种更好的方法:我们可以为整个团队编写单个约束文件,并在任何地方使用它,如果要安装的东西需要安装 「 helloworld 」,则将使用约束文件中指定的固定版本

从 Wheels 中安装

「 Wheel 」是一种已经构建好的归档的格式,与从源代码归档中构建和安装相比,可以大大加快安装速度

关于 Wheel 的更多信息,可以参考 Wheel 文档PEP427PEP425

当然了,这在早期带宽不足和机器性能不好的情况下非常好用,目前,很多时候,已经没有使用的必要了

Wheel 有很多值得期待的地方,Pip 也正是看中了这些优点,才会将 Wheel 作为其工具之一

如果要在 Pip 中禁用 Wheel,可以在安装 pip 的时候使用 --no-binary 命令行参数

pip install 一个第三方包时,默认会优先查找是否存在合适的 wheel 归档,如果不存在,才会查找相应的源代码归档

如果要直接从一个 wheel 归档中安装某个包,可以使用下面的命令

pip install SomePackage-1.0-py2.py3-none-any.whl

pip wheel

对于不存在的 wheel ,Pip 提供了 pip wheel 命令用来为所有的 requirements.txt 和依赖想构建一个 wheel

使用 pip wheel 构建一个本地的 wheel 的命令如下

pip install wheel
pip wheel --wheel-dir=/local/wheels -r requirements.txt

然后就可以使用本地的 wheel 目录,而不是 PyPI 来安装一个 wheel

pip install --no-index --find-links=/local/wheels -r requirements.txt

卸载包 ( uninstall packages)

对于使用 pipeasy_install 安装的包,几乎都可以使用 pip uninstall 命令来卸载

$ pip uninstall SomePackage

pip 还会在升级到较新版本之前自动卸载旧版本的软件包

有关 pip uninstall 更多的信息和示例,可以访问 pip uninstall

列出安装的包

如果想要查看或列出已经安装的包,可以使用下面的命令

$ pip list

输出结果一般如下

docutils (0.9.1)
Jinja2 (2.6)
Pygments (1.5)
Sphinx (1.1.2)

如果想要列出已经过期的包,且显示它们的可用的最新版本,可以使用下面的命令

$ pip list --outdated

显示结果一般如下

docutils (Current: 0.9.1 Latest: 0.10)
Sphinx (Current: 1.1.2 Latest: 1.1.3)

如果想要查看某个包的详细信息,可以使用 pip show 命令

$ pip show sphinx
---
Name: Sphinx
Version: 1.1.3
Location: /my/env/lib/pythonx.x/site-packages
Requires: Pygments, Jinja2, docutils

有关 pip showpip list 命令的更多详情,可以访问我们的 pip listpip show 命令

搜索包

如果我们不知道某个包的确切名称,仅仅记得包名含有某个关键字,可以使用 pip search 命令

pip search "query"

pip search 命令会从 PyPI 中查找名称和简介中包含了 query 关键字的包

搜索结果一般如下

$ pip search query
json-query (0.0.2)         - JSON Query tools
juju-query (0.0.1)         - Juju query charmstore
nameko-query (0.0.2)       - Query extension for nameko.
date-query (0.10.2)        - A program to query dates
graphite-query (0.11.3)    - Utilities for querying graphite's database

有关更多 pip search 命令的详细信息,可以访问我们的 pip search 参考

结束语

我一开始给本章节取的名字是用户指南,后面一看,不对劲,想要写的信息太多了,所以,只能使用 日常使用 这几个字

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.