Python Pip 参考手册 - pip install 命令 ( 三 )

yufei       5 年, 9 月 前       7508

pip install 命令的知识点怎么会这么多啊,都用了两个章节感觉还没讲完,哎,本章节我们继续

安装顺序

v6.1.0 开始, pip install 命令会在安装指定的包之前先安装所有包的依赖项,即使用 「 拓扑顺序 」

这是目前唯一承诺的排序方式,尽管 Pip 可能会按照安装参数的顺序或按需求文件中的项目顺序安装,但这不是一个承若,随时都可能会变

依赖循环 ( 也称为 「 循环依赖 」) 的情况下,当前实现 ( 稍后可能改变 ) 的流程是让循环遇到的第一个成员最后安装

例如,如果 quux 依赖于 foo ,而 foo 依赖于 baz ,而 bar 又依赖于 foo

pip install quux
...
Installing collected packages baz, bar, foo, quux

pip install bar
...
Installing collected packages foo, baz, bar

v6.1.0 之前,pip 没有对安装顺序做出任何承诺

拓扑安装的决定基于以下原则:安装应该让环境在每个步骤都可用的方式进行

这个原则会带来两大好处:

  1. 安装过程中可以并行使用环境
  2. 安装失败不太可能会破坏环境,虽然 pip 最终会支持故障回滚,但这只是一种改进而已

新的安装顺序的目的并不是替换( 也不会不替换 )使用 setup_requires 来声明构建依赖关系,但在下面列出的三种情况下,则是有助于某些项目从 sdist 安装的,这在之前的安装顺序中是可能失败的

  1. 使用 install_requires 构建了依赖项,同时这些依赖项也被声明为安装依赖项
  2. python setup.py egg_info 在没有安装构建依赖项的情况下仍然可以工作
  3. 无论出于何种原因,不想也不会使用 setup_requires 声明其构建依赖项

需求 ( Requirements ) 文件格式

需求文件的每一行都表示要安装的内容,跟 pip install 命令的参数一样,支持以下格式

[[--option]...]
<requirement specifier> [; markers] [[--option]...]
<archive url/path>
[-e] <local project path>
[-e] <vcs project url>

对于所有的格式,可以查看 范例 以了解它们是如何使用的

  1. # 开头的行是注释,在解析的时候会被忽略

  2. 空格后跟一个 # 会导致 #和该行的其余部分被视为注释

  3. 以未转义的 \ 结尾的行被视为行继续,会忽略后面紧跟的换行符

  4. 在继续处理每一行之前,首先会删除注释

  5. 同时支持以下可选参数

    -i, --index-url
    
    --extra-index-url
    
    --no-index
    
    -f, --find-links
    
    --no-binary
    
    --only-binary
    
    --require-hashes
    

例如,可以使用下面的代码指定 --no-index--find-links

    --no-index
    --find-links /my/local/archives
    --find-links http://some.archives.com/archives

如果有需要,还可以使用 -r 引入其它需求文件,使用方式如下

    -r more_requirements.txt

同时还可以使用 -c 指定约束条件

    -c some_constraints.txt

使用环境变量

v10 版本开始,Pip 支持在需求文件中使用环境变量,这样我们就可以在环境变量中存储敏感数据 ( 令牌,密钥等 ) ,然后在需求文件中引用变量的名称,让 pip 在运行时查找它们的值,这种方法与常用的 12不配置模式 一致

环境变量名称必须遵循 POSIX 格式,包括大写名称旁边的括号,例如 ${API_TOKEN},pip 会在运行时尝试查找在主机系统上定义的相应环境变量

注意: 并不支持其它变量扩展语法,例如 $VARIABLE%VARIABLE%

需求文件范例

将下面的内容保存到 requirements.txt 中,然后就可以使用 pip install -r example-requirements.txt 命令来安装

#
####### example-requirements.txt #######
#
###### Requirements without Version Specifiers ######
nose
nose-cov
beautifulsoup4
#
###### Requirements with Version Specifiers ######
#   See https://www.python.org/dev/peps/pep-0440/#version-specifiers
docopt == 0.6.1             # Version Matching. Must be version 0.6.1
keyring >= 4.1.1            # Minimum version 4.1.1
coverage != 3.5             # Version Exclusion. Anything except version 3.5
Mopidy-Dirble ~= 1.1        # Compatible release. Same as >= 1.1, == 1.*
#
###### Refer to other requirements files ######
-r other-requirements.txt
#
#
###### A particular file ######
./downloads/numpy-1.9.2-cp34-none-win32.whl
http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl
#
###### Additional Requirements without Version Specifiers ######
#   Same as 1st section, just here to show that you can put things in any order.
rejected
green
#

需求说明符

Pip 支持从包索引中使用需求说明符来进行安装,一般来说,一个需求说明符由项目名称和可选的紧跟在项目名称后的版本说明符组成

[PEP508] 文档包含了一份关于需求格式的完整的说明文档 (当前 pip 当前还不支持 url_req 形式的说明符)

下表列出了一些说明符的例子

SomeProject
SomeProject == 1.3
SomeProject >=1.2,<.2.0
SomeProject[foo, bar]
SomeProject~=1.4.2

v6.0 版开始,pip 还支持包含环境标记的说明符

如下所示

SomeProject ==5.4 ; python_version < '2.7'
SomeProject; sys_platform == 'win32'

环境标记在命令行和需求文件都可以使用

按要求覆盖

v7.0 开始,pip 支持通过使用需求文件传递和控制给 setup.py 的命令行选项,但以此同时也会禁用该包的 wheels 、缓存或其它,因为 setup.py 中不包含 wheel

--global-option--install-option 选项用于将选项参数传递给 setup.py,例如:

FooProject >= 1.2 --global-option="--no-user-cfg" \
    --install-option="--prefix='/usr/local'" \
    --install-option="--no-compile"

以上内容会转换为如下运行 FooProjectsetup.py 脚本

# Invalid. Please use '--install-option' twice as shown above.
FooProject >= 1.2 --install-option="--prefix=/usr/local --no-compile"

预发布版本

v1.4 版本开始,pip 默认只会安装 PEP426 指定的稳定版本

如果某个版本无法解析为 PEP426 兼容的版本,则会被认定为是预发布版本

如果需求说明符包含了预发布版本或开发版本 ( 例如 >= 0.0.dev0 ),那么 pip 将允许安装该需求的预发布版本和开发版本,有个例外,就是使用了 != 标记

pip install 命令还支持 --pre 标志,该标志支持安装预发行版和开发版

VCS 支持

pip 支持从 GitMercurialSubversionBazaar 安装,并使用 URL 前缀检测 VCS 的类型 git+hg+bzr+svn+

pip 运行 VCS 命令需要先安装相应的客户端:githgsvnbzr

VCS 项目可以自由选择是否在编辑模式下安装 ( 使用 --editable 选项 )

  • 如果使用可编辑安装,在虚拟环境中,克隆的位置为 <venv path>/src/SomeProject,对于全局安装,则为 <cwd>/src/SomeProject

  • 对于不可编辑的安装,项目在 temp dir 进行本地构建,然后正常安装。请注意,如果已经安装了符合要求的版本,且没有添加 --upgrade 标志的情况下,VCS 源将不会进行覆盖安装。VCS 要求固定提交目标的包版本号 ( 在setup.py 文件中指定 ),版本号不一定是提交本身

  • 当且仅当使用可编辑模式完成安装时,pip freeze 子命令才会记录 VCS 需求说明符 ( 引用特定的提交 )

pip 会在其其依赖逻辑中使用 URL 后缀 egg=<project name>-<version> 作为 「项目名称 」组件,以便在 pip 下载和分析元数据之前识别项目

egg 值中的 <version> 是可选的,在功能上并不重要,它的作用仅用于改进可读性,让人们了解正在使用的版本

对于 setup.py 不在项目根目录中的项目,会使用 「 子目录 」 组件,「 子目录 」 组件的值为项目的根目录到 setup.py 文件所在的路径名

所以,如果我们存储库的采用了如下布局

| pkg_dir/
|----| setup.py # setup.py for package pkg
|----| some_module.py
| other_dir/
|----| some_file
| some_other_file

那么就需要使用 pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir. 命令来安装

Git

Pip 目前支持使用 gitgit+httpgit+httpsgit+sshgit+gitgit+file 进行克隆 ( clone ) 操作

下面的代码列出了这些支持的格式的用法

[-e] git://git.example.com/MyProject#egg=MyProject
[-e] git+http://git.example.com/MyProject#egg=MyProject
[-e] git+https://git.example.com/MyProject#egg=MyProject
[-e] git+ssh://git.example.com/MyProject#egg=MyProject
[-e] git+git://git.example.com/MyProject#egg=MyProject
[-e] git+file:///home/user/projects/MyProject#egg=MyProject
-e git+git@git.example.com:MyProject#egg=MyProject

同时还支持传递分支名称,提交的哈希或标记名称,如下所示

[-e] git://git.example.com/MyProject.git@master#egg=MyProject
[-e] git://git.example.com/MyProject.git@v1.0#egg=MyProject
[-e] git://git.example.com/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709#egg=MyProject

当传递了提交的哈希值时,指定完整哈希比部分哈希更可取,因为完整哈希允许 pip 更有效地运行 ( 例如通过减少网络调用 )

Mercurial

对于 Mercurial,pip 支持的协议有 : hg+httphg+httpshg+static-httphg+ssh

下面的代码列出了这些支持的协议的用法

[-e] hg+http://hg.myproject.org/MyProject#egg=MyProject
[-e] hg+https://hg.myproject.org/MyProject#egg=MyProject
[-e] hg+ssh://hg.myproject.org/MyProject#egg=MyProject
[-e] hg+file:///home/user/projects/MyProject#egg=MyProject

pip 同时还支持指定修订号,修订哈希,标记名称或本地分支名称,如下所示

[-e] hg+http://hg.example.com/MyProject@da39a3ee5e6b#egg=MyProject
[-e] hg+http://hg.example.com/MyProject@2019#egg=MyProject
[-e] hg+http://hg.example.com/MyProject@v1.0#egg=MyProject
[-e] hg+http://hg.example.com/MyProject@special_feature#egg=MyProject

Subversion

对于 Subversion,pip 支持的 URL 协议有: svnsvn+svnsvn+httpsvn+httpssvn+ssh

pip 还支持对 SVN URL 进行特定修订,如下所示

[-e] svn+svn://svn.example.com/svn/MyProject#egg=MyProject
[-e] svn+http://svn.example.com/svn/MyProject/trunk@2019#egg=MyProject

后一条语句将迁出修订版 2019,还可以使用 @{20080101} 迁出从 2008-01-01 以来的修订版,当需要迁出指定的修订版本时,只能使用 -e svn+....

Bazaar

对于 Bazaar,pip 支持的协议有 bzr+httpbzr+httpsbzr+sshbzr+sftpbzr+ftpbzr+lp

下面的代码列出了这些支持的协议的用法

[-e] bzr+http://bzr.example.com/MyProject/trunk#egg=MyProject
[-e] bzr+sftp://user@example.com/MyProject/trunk#egg=MyProject
[-e] bzr+ssh://user@example.com/MyProject/trunk#egg=MyProject
[-e] bzr+ftp://user@example.com/MyProject/trunk#egg=MyProject
[-e] bzr+lp:MyProject#egg=MyProject

还支持标签和修订版本,如下所示

[-e] bzr+https://bzr.example.com/MyProject/trunk@2019#egg=MyProject
[-e] bzr+http://bzr.example.com/MyProject/trunk@v1.0#egg=MyProject

使用环境变量

从版本 v10 开始,pip 还可以使用环境变量,这样就可以引用私有存储库而无需在需求文件中存储访问令牌

例如,可以像下面的代码一样重新启用允许 Basic Auth 进行身份验证的私有 git 存储库

[-e] git+http://${AUTH_USER}:${AUTH_PASSWORD}@git.example.com/MyProject#egg=MyProject
[-e] git+https://${AUTH_USER}:${AUTH_PASSWORD}@git.example.com/MyProject#egg=MyProject

注意:仅支持 ${VARIABLE} 语法格式,不支持 $VARIABLE%VARIABLE%

后记

不行,接下来的内容还是太长,算了,剩下的内容挪到下一章节吧

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

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

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