Python Pip 基础教程 - 配置文件

yufei       6 年, 4 月 前       5235

鉴于我华夏大陆的情况,使用 pip installPyPI 官方仓库安装第三方包总是慢吞吞的,好在国内很多公司都提供了 PyPI 仓库的官方镜像,方便了我们劳苦的 Python 开发者

如果要使用 PyPI 的国内镜像,我们就不得不作出一些配置,然后,我想了想,要不,索性,就把 pip 会使用到的配置文件也详细说明一下,这,就是本章节的愿景

pip 配置

配置文件

Pip 允许在标准的 .ini 格式配置文件中设置所有命令行选项的默认值

当我看到这句话时心里咯噔了一下,这意味着什么,这意味着三位一体配置法

  1. 首先,对于所有的命令行参数,都有默认的配置项
  2. 其次,可以在 ini 配置文件中覆盖这些默认的配置
  3. 再次,可以在使用命令时,传递一些参数来覆盖前两者的默认设置

这几乎是所有标准的参数的设置格式,但我们实际开发时,往往忽略了某些部分

ini 配置文件的名称和存放位置在不同平台上略有不同,而且拥有 用户 ( per-user ),虚拟环境 ( per-virtualenv ) 和 机器 ( site ) ( 在所有用户之间共享 ) 三个级别的配置

  1. 用户级别 ( per-user )

    • 在 Unix 上,配置文件名称是 pip.conf,而默认的存放位置为 $HOME /.config/pip/pip.conf.config 目录的位置由 XDG_CONFIG_HOME 环境变量来指定

    • 在 macOS 上,配置文件名称是 pip.conf,而对于存放目录,如果存在 $HOME/Library/Application Support/pip 目录,则配置文件的存放位置为 $HOME/Library/Application Support/pip/pip.conf,否则为 $HOME/.config/pip/pip.conf

    • 在 Windows 上,配置文件名称是 pip.ini,保存位置一般是 %APPDATA%\pip\pip.ini

    另外,对于用户级别的配置文件,还存在一个惯例上的保存位置,它们是

    • 在 Unix 和 macOS 系统上,为 $HOME/.pip/pip.conf

    • 在 Windows 系统上,为 %HOME%\pip\pip.ini

    这些保存位置并不是固定一层不变的,我们可以使用 PIP_CONFIG_FILE 环境变量来重新设定,例如在 macOS 下可以使用

    export PIP_CONFIG_FILE=$HOME/.env/pip.conf
    
  2. 虚拟环境 ( virtualenv )

    对于一个虚拟环境中,比如使用 virtualenvpyenv 创建的虚拟环境中,配置文件的名称和保存位置分别为

    • 在 Unix 和 macOS 系统上,为 $VIRTUAL_ENV/pip.conf

    • 在 Windows 系统上,为 %VIRTUAL_ENV%\pip.ini

  3. **机器 ( site ) 级别

    • 在 Unix 上,该文件可能位于 /etc/pip.conf 中。或者,可能位于环境变量 XDG_CONFIG_DIRS ( 如果存在 )中设置的任何路径的 「 pip 」子目录中,例如 /etc/xdg/pip/pip.conf

    • 在 macOS 系统上,该文件位于 /Library/Application Support/pip/pip.conf

    • 在 Windows XP 系统上,该文件位于 C:\Documents and Settings\All Users\Application Data\pip\pip.ini

    • 在 Windows 7 及以后的版本中,该文件是一个隐藏文件,位于 C:\ProgramData\pip\pip.ini

    • 对于 Windows Visa 系统,对了,不支持站点级别的配置文件

如果 Pip 在以上三个级别的多个位置找到了多个配置文件,则会按照以下的顺序组合它们

  1. 首先,读取 机器 级别的配置文件
  2. 然后,读取 用户 级别的配置文件,并覆盖 机器级别 相关的配置,一般情况下,这是最终的配置
  3. 最后,如果使用的是虚拟环境,则继续读取 虚拟环境 的配置文件

每个文件读取都会覆盖从先前文件读取的任何值,因此如果在机器范围文件和每用户文件中都指定了全局超时,则后一个值将是将使用的值

对于 ini 配置文件中的每个配置项,名称都是命令行参数的长命令行选项,例如,我们想要使用一个不同的包索引 ( --index-url ),比如豆瓣的 https://pypi.douban.com/simple ,然后再设置 HTTP 超时 ( --default-timeout) 为 60s ,则我们的配置文件可能如下

[global]
timeout = 60
index-url = https://pypi.douban.com/simple

每个 pip 子命令都可以在它们自己的段内可选的配置一些项目,以便覆盖具有相同名称的全局设置

例如我们把所有命令的超时时间设置为 60s,这个必须在 [global] 段内,这样才能影响到全部的命令,而对于 pip freeze 子命令,10s 的超时足矣,则可以在 [freeze] 对内配置

[global]
timeout = 60

[freeze]
timeout = 10

对于布尔值的命令行可选参数,比如 --ignore-installed--no-cache-dir ,它们的值为 truefalse

[global]
no-cache-dir = false

[install]
ignore-installed = true

而对于是否启用的命令行可选参数,比如 --no-dependencies--no-compile,它们的值为 yesno

[install]
no-dependencies = yes
no-compile = no

对于可以追加多个值的命令行可选参数,比如 --find-links 可以写在多行上

[global]
find-links =
    http://download.example.com

[install]
find-links =
    http://mirror1.example.com
    http://mirror2.example.com

环境变量

Pip 的命令行参数还可以使用诸如 PIP_<UPPER_LONG_NAME> 的环境变量的方式来设置,所有可选参数中的破折号 ( - ) 需要替换为下划线 _

例如,设置默认的超时时间,可以如下

export PIP_DEFAULT_TIMEOUT=60

这与直接使用命令行参数 --default-timeout 设置相同

pip --default-timeout=60 [...]

对于可以重复的命令行选项,请使用空格分隔多个值。例如:

export PIP_FIND_LINKS="http://mirror1.example.com http://mirror2.example.com"

下面的方式则跟上面的相同

pip install --find-links=http://mirror1.example.com --find-links=http://mirror2.example.com

配置优先级

在这么多种设置中,命令行选项优先于环境变量,环境变量优先于配置文件

也就是说,命令行选项会覆盖环境变量,环境变量会覆盖配置文件

而在配置文件中,特定命令段的优先级高于全局部分

例如:

  • --host=foo 会覆盖 PIP_HOST=foo
  • PIP_HOST=foo 会覆盖配置文件中的 [global] 段中的 host=foo
  • 配置文件特定命令段 [<command>] 内的 host=bar 会覆盖全局段 [global] 内的 host = foo
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

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

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