python之pip包管理

本文详细介绍了Python的pip包管理,包括pip3的安装、使用手册,如安装py包、使用代理服务器、requirements文件的管理和使用,以及各种pip命令的详细说明,如install、uninstall、freeze等。此外,还涵盖了pip的配置文件、wheel格式和用户安装等高级话题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python之pip包管理


1. 安装pip3

pip3是pyhton3.0的包管理命令,而pip是python2.0的管理命令,pip3是python包的安装、管理命令,共有两种安装方式

1.1 系统安装

系统安装相对简单一些,直接打开终端键入以下命令即可(松松使用的是ubuntu 18.04):

$ sudo apt update  #更新软件列表
$ sudo apt install python-pip3  #安装pip3
$ sudo pip3 -h # 检查是否安装成功

1.2 使用Python安装

使用python3进行安装有些麻烦,首先要获取get-pip.py文件,使用该方式安装则比较灵活

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py #获取get-pip.py文件
$ python get-pip.py # #安装pip
$ sudo pip3 -h # 检查是否安装成功

注:

  • 这里需要curl与python两个命令,如需要可以安装
  • get-pip.py 可以网上下载然后直接运行,从而无需使用curl命令
$ python get-pip.py -no-setuptools  --no-wheel # 不尝试安装wheel和setuptools
$ python get-pip.py --no-index --find-links=/local/copies # 使用本地的pip和setuptools进行安装
$ python get-pip.py --proxy="http://[user:passwd@]proxy.server:port" # 安装到代理服务器上
$ python get-pip.py pip==9.0.2 wheel==0.30.0 setuptools==28.8.0 选择特定pip版本,wheel版本及setuptools版本进行安装

2. 使用手册

2.1 运行pip

pip是命令行命令,即可以再终端中直接使用,如果在终端中无法使用,可能存在以下几种可能:

2.1.1 未安装pip

直接安装pip,详情请参考《1. 安装pip3》

2.1.2 未设置环境变量

当未设置环境变量时,如果不在pip安装的路径下,则会提示如下内容

Command 'pip' not found, but can be installed with:
sudo apt install python-pip

看到以下提示时,可以进行查看 pip3有没有安装以及安装位置

$ whereis pip3

如果pip3安装了,则会返回地址,否则是没有安装。拿到pip3的地址后,则需要设置环境变量,设置环境变量有3中选择,如下所示:

# 1. 临时添加该环境变量,命令行直接运行 
$ exprot PATH = "pip3 location :$PATH" 

# 2. 永久修改当前用户的环境变量,无需sudo权限
$ gedit ~/.bashrc
exprot PATH = "pip3 location :$PATH"  # 将该代码粘贴到.bashrc文件,保存即可
$ source ~/.bashrc

# 3. 永久修改用户的环境变量,需sudo权限
$ sudo gedit /etc/profile
exprot PATH = "pip3 location :$PATH"  # 将该代码粘贴到/etc/profile文件,保存即可
$ sudo source /etc/profile

2.1.3 使用python进行

pip 也可以使用python命令进行执行,命令如下:

$ python -m pip <pip arguments>

2.2 安装py包

pip支持直接从pypi安装包、版本控制、本地安装或者直接从分发包中安装,但最常用的是从pypi安装,代码如下

$ pip install SomePackage            # 最新版本
$ pip install SomePackage==1.0.4     # specific version
$ pip install 'SomePackage>=1.0.4'     # minimum version

2.3 使用代理服务器

当使用代理服务器时,需要按照以下方式安装,

$ pip  --proxy==[user:passwd@]proxy.server:port

2.4 requirements 文件

2.4.1 requrements使用

该文件包含需要使用pip3 install安装的一系列包,一般来说,该文件是将pip3 install 安装的所需的参数放置在一个文件内。该文件大致有4种用途:

2.4.1.1 可重复安装

当需要对固定包的版本进行重复安装过时,个人理解,当需要对另一台pc进行环境配置时用到,将当前配置好的PC环境移植到另一台pc上用到

$ pip3 freeze > requirements.txt
$ pip3 install -r requirements.txt
2.4.1.2 解决包之间版本冲突的问题

假如有三个包A、B、C,A需要 C>=1.0,而B需要1.0<=C<=3.0,如果直接使用pip命令安装时,如若先安装A包,则有可能安装的包不能满足B包的需要,因此,为了解决该问题而来,解决方案如下,直接再requrements文件中输入以下代码即可

pkg1
pkg2
pkg3>=1.0,<=2.0
2.4.1.3 强制安装低版本的包

假如有两个包A、C,A依赖C<= 1.3版本,直接在requrements文件中输入以下代码即可

ProjectA
ProjectB<1.3

2.5 constraints文件

该文件的用途主要是限制文件中的包被重新安装。假设你有包A,该当前环境需要特定某个包A的特定版本,包B也需要包A,为了保持环境的延续性,则将包A写入constraints文件,防止其被升级。

2.6 wheel

相对于源代码的编译和安装,wheel 提供了更加方便快捷的方式。
pip首选使用wheel进行安装,如果不需要,则使用 --no-binary来限制pip的安装。

$ pip install SomePackage-1.0-py2.py3-none-any.whl #使用wheel进行安装

如果没有合适的wheel,pip install会选择合适的源代码进行安装,即可以使用命令pip wheel来进行源码安装,在使用pip wheel前,需要对安装wheel(该包提供了bdist_wheel的setuptools的扩展),

$ pip install wheel
$ pip wheel --wheel-dir=/local/wheels -r requirements.txt # 构建wheel并将包名写入requirements文件中
$ pip install --no-index --find-links=/local/wheels -r requirements.txt #指定安装wheel位置和包名

2.7 用户安装

允许在没有全局写入权限的人单独安装自己的包,可以通过设置环境变量PYTHONUSERBASE来更改安装位置,环境变量会更新到site.USER_BASE,再python中,用户安装的包的位置由site.USER_BASE变量确认。如以下代码

$ export PYTHONUSERBASE=/myappenv
$ pip install --user 

安装相关规则:

  • 当安装的包与全局的包有冲突时,忽视不会卸载全局包
  • 当安装的包与全局包一样时,告知全局包如何满足当前依赖并且不进行安装
  • 当有--no-site-packages虚拟环境时,pip不会进行用户安装,因为再虚拟环境下,用户的site-packages是不可见的
  • 当在一个--system-site-packages虚拟环境时,不会安装一个与虚拟环境site-packages相冲突的 包,因为缺少sys.path的优先权

2.8 固定版本

使用固定版本可以防止安装bug及与当前包集不适配的版本。在使用pip freeze产生的requirements文件不仅可以保证顶层的依赖关系而且也可以保证子依赖的兼容性。
可以添加hash校验,保证包的正确性。

2.9 程序中使用pip

pip可以再python代码中使用,通过import pipd的形式,但不要使用pip的内部api,原因如下:

  • pip的代码不是线程安全的,因此使用代码开辟一个线程后,不保证一定能开辟成功
  • pip假定执行完工作后,将会关闭线程。
  • pip假定位命令行使用,没有考虑过代码使用,可能会受到影响。

最好在子进程中实验更改功能,代码如下

# 需要导入 subprocess 模块
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'my_package']) 

2.10 config 文件

config文件是存储所有命令及其参数配置的地方,可以更改所有命令的默认形式。
其存放位置如下:

  • site-wide全部用户:/etc/pip.conf 或者使用环境变量
  • 当前用户:~/.config/pip/pip.conf 或者~/.pip/pip.conf
  • 虚拟环境:存放在 $虚拟环境/pip.conf
  • 如果以上几个文件均存在,则其调用顺序为:site-wide > per-user > virtualenv

在使用命令的过程中,有如下几条原则:

  • 新的参数替换旧内容,子参数命令配置覆盖global命令
  • 每条命令均可以根据自己参数进行配置默认的参数
  • 支持同一个命令多个标签,同一个参数多个内容

config可以使用环境变量来设置,方法如下:

  • 可以使用环境变量来替代参数,但必须以PIP_开头,并使用_作为分隔符
  • 优先级:参数使用>环境变量>conf 子命令>conf global
  • 自动补全命令,支持bash zsh fish pip completion --bash >> ~/.profile

在安装包的过程中,如果要制定以用户的权限进行安装,则需要使用 --user参数,且包更新策略:更新所有依赖,不管是否满足新的依赖;仅仅更新需要的依赖,默认 only-if-needed;upgrade-all 是安全的eager更新


3. 参考手册

该部分主要介绍,pip命令的各种命令及其参数的使用

3.1 pip

3.1 使用方式

pip <command> [options]

3.2 描述

3.2.1 日志
3.2.1.1 控制台日志

pip 通过几个参数控制控制台的日志输出等级,参数如下:

  • -v, --verbose:输出详细日志
  • -q, --quiet:静默输出,不输出任何内容
  • --no-color:错误与警告不以颜色字体突出
3.2.1.2 文件日志

pip提供参数来将日志存入到文件中

  • --log <path>:存储日志到文件中
3.2.1.3 --exists-action

如果路径存在,则执行如下载文件、检查安装库、创建安装档案,如果该选项没有被定义,pip将会提示。

  • switch:仅仅进行相关的VCS检查。
  • ignore:中断当前操作
  • wipe:再创建、下载或检查一个新包时,删除一个文件或VCS 检查
  • backup:当.bak文件存在时,重命名该文件或检查该文件名字
  • abort:终端pip同时返回非零退出状态

3.2.2 创建系统接口

pip 通过构建系统来创建包。默认情况下,使用setuptools来进行型,如果工程通过pyprojec.toml文件指定了一个不同的构建系统,pip将会使用这个系统。构建系统使用源码生成“轮子”,然后再使用“轮子”安装包。

构建系统的当前接口通过setup.py脚本来定义全部的构建行为。

3.2.2.1 setputools的注入

PEP 517没有被使用十,setuptools是支持的构建系统,然而并不是所有的包都使用该系统,再调用setup.py之前,pip通过`将setuptools注入```sys.modules``来实现。

修改构建系统的输出编码:local.getpreferredencoding

3.3 一般选项

  • -h, --help:显示帮助信息
  • --isolated:pip运行在隔离状态,忽视环境变量和用户配置
  • -v, --version:显示版本信息
  • --proxy<proxy>:以[user:passwd@]proxy.server:port.指定代理位置
  • --retries <retries>:每次链接可以被重复的最大次数
  • --timeout <sec>:设置超时时间
  • --trusted-host <hostname>:标记合法主机和端口,及时不存在合法或者https
  • --cert <path>:备用CA捆绑软件的路径。
  • --client-cert <path>:ssl认证路径,文件中包PEM格式的私钥及认证
  • --cache-dir <dir>:存储缓存数据的路径
  • --no-cache-dir:不缓存
  • --disable-pip-version-check:不要定期检查PyPI,以确定是否有新版本的pip可用于下载
  • --no-python-version-warning:即将推出的不受支持的Python的静默弃用警告。

3.2 pip install

3.2.1 使用方式

pip install [options] <requirement specifier> [package-index-options] ...
pip install [options] -r <requirements file> [package-index-options] ...
pip install [options] [-e] <vcs project url> ...
pip install [options] [-e] <local project path> ...
pip install [options] <archive url/path> ...

3.2.2 描述

包来自于

  • 使用requirements指定的pypi
  • VCS 项目 urls
  • 本地包
  • 本地或远程获得的源码

3.2.3 概览

pip安装的步骤

  • 确认基本需要,参数在此处进行处理
  • 解决依赖,决定需要安装哪些包
  • 创建轮子,所有的依赖关系在此处构建出轮子
  • 安装包

3.2.4 参数处理

pip 处理包来源的顺序

  • url或者项目
  • 本地文件夹(需要包含setup.py)
  • 本地文件
  • requirements

3.2.5 计算项目名和版本

对于wheel,其清楚知道需要的项目名和版本号。对于本地文件夹,需要setup.py egg_info文件来决定项目的元数据。
当全部版本都满足时,安装最新的版本。如果多个源码合适,则假定任何一份源码都是可接受的。

3.2.6 安装顺序

在进行包的依赖时,遵循顶层顺序的原则,则优先装顶级依赖,如果在依赖中出现了环,则遵循顶层依赖最后安装的策略。

3.2.7 requirements文件格式

[[--option]...]
<requirement specifier> [; markers] [[--option]...]
<archive url/path>
[-e] <local project path>
[-e] <vcs project url>
  • 文件的每一行都相当于一个 pip install。
  • # -*- coding: utf-8 -*-指定文件格式
  • 可以使用环境变量来

3.3 pip download

3.3.1 使用方式

pip download [options] <requirement specifier> [package-index-options] ...
pip download [options] -r <requirements file> [package-index-options] ...
pip download [options] <vcs project url> ...
pip download [options] <local project path> ...
pip download [options] <archive url/path> ...

3.3.2 描述

包来自于(下载)

  • 使用requirements指定的pypi
  • VCS 项目 urls
  • 本地包
  • 本地或远程获得的源码

3.3.3 参数

  • --no-clean:不清理build文件夹
  • -w,--wheel-dir<dir>:将wheels生成在dir中,默认当前文件夹
  • --no-binary <format_control>:不使用二进制包。
  • --only-binary:不适合用源包
  • --prefer-binary:优先旧包
  • --build-option:支持setup.py bdist_wheel的额外参数
  • --no-build-option:当生成发布资源时,不使用独立包
  • --use-pep517:使用PEP517来进行构建包
  • -c,--constraint <file>:限制文件
  • -e,--editable <path/URL>:在editable模式下安装项目
  • -r,--requirements <file>:安装requirements中的包
  • --src <dir>:检查editable项目的文件夹
  • --ignore-requires-python:忽略Require-python信息
  • --no-deps:不安装依赖包
  • -b,--build<dir>:创建包的文件夹
  • --progress-bar <progess_bar>:以指定类型显示信息
  • --global-option:再调用bdist_wheel命令前额外的全局项
  • --require-hashes:进行hash校验
  • -i,--index-url<url>:根据 url装包
  • --extra-index-url:-i补充
  • --no-index:忽略包索引
  • -f,--find-links<url>:如果是url或者路径,则会在指定的url或路径下寻找.tar.gz或.whl文件进行安装。如果是本地文件夹,则会在本地list中寻找

3.4 pip uninstall

3.4.1 使用方式

pip uninstall [options] <package> ...
pip uninstall [options] -r <requrements files> ...

3.4.2 描述

卸载包,该命令可以卸载大多数的安装包,除了

  • 通过 setup.py安装的pure distutuils包,因为没有安装依赖
  • 通过 setup.py涉及的脚本

3.4.3 参数

  • -r,--requrements<file>:卸载文件中指定的包
  • -y,--yes:不提示确认

3.5 pip freeze

3.5.1 使用方式

pip freeze [options]

3.5.2 描述

显示一个或多个已安装包的信息,其输出为RFC-邮件头格式。

3.5.3 参数

  • -r,--requrements<file>:根据文件中的包的显示相应输出
  • -f,--find-links<url>:根据url查找包,并显示相关输出
  • -l,--local:如果虚拟环境中有全局连接权限,则不显示全局包
  • --user:仅仅显示user下的安装的包
  • --path<path>:根据提供的路径显示安装的包
  • --all:全部均进行显示,包含wheel、distribute、pip及setuptools
  • --exclude-editable:不显示可编辑的包

3.6 pip list

3.6.1 使用方式

pip list [options]

3.6.2 描述

显示全部包,包含editables的包。包名以字符的排序显示

3.6.3 参数

  • -o,--outdated:显示过期的包
  • -u,--untodate:显示可以更新的包
  • -e,--editable:显示可编辑的包
  • -l,--local:如果虚拟环境中有全局连接权限,则不显示全局包包
  • --path<path>:根据提供的路径显示安装的包
  • --user:仅仅显示user下的安装的包s
  • --pre:包含预发布和开发模式下的版本,默认仅显示稳定包
  • --format <list_format>:设置输出格式:columns(默认)、freeze、json
  • --not-required:显示不依赖当前安装包的包
  • --exclude-editable:不显示可编辑的包
  • --include-editable包含可编辑的包
  • -i,--index-url<url>:根据 url装包
  • --extra-index-url<url>:-i的补充
  • --no-index:忽视包索引
  • -f,--find-links<url>:根据url查找包,并显示相关输出

3.7 pip show

3.7.1 使用方式

pip show [options] <package>

3.7.2 描述

以requirements格式输出已安装包的信息。并以字母顺序排列显示

3.7.3 参数

  • -f,--files:显示每一个安装包的全部已安装文件列表

3.8 pip search

3.8.1 使用方式

pip search [options] <package>

3.8.2 描述

在pypi中查找包

3.8.3 参数

  • -i,--index<url>:根据url查找包

3.9 pip cache

3.9.1 使用方式

pip cache dir
pip cache info
pip cache list [<pattern>]
pip cache remove <pattern>
pip cache purge

3.9.2 描述

检查并管理wheel的cache

  • dir:显示cache文件夹
  • info:显示cache信息
  • lsit:显示cache中缓存的包
  • remove:移除cache中的包
  • purge:清空cache

3.9.3 参数

与pip保持一致

3.10 pip check

3.10.1 使用方式

pip check [options]

3.10.2 描述

验证已安装的包有合适的依赖

3.11 pip config

3.11.1 使用方式

pip config [<file-option>] list
pip config [<file-option>] [--editor <editor-path>] edit
pip config [<file-option>] get name
pip config [<file-option>] set name value
pip config [<file-option>] unset name

3.11.2 描述

管理本地与全局配置

  • list:显示配置
  • edit:编辑配置
  • get:获取某项配置
  • set:设置某项
  • unset:取消某项

若没有任何设置的情况下,默认修改的是当前用户的。

3.11.3 参数

  • --editor<editor>:编辑文件
  • --global:全局
  • --user:用户
  • --site:当前环境

3.12 pip wheel

3.12.1 使用方式

pip wheel [options] <requrements specifier>...
pip wheel [options] -r <requrements file>...
pip wheel [options] [-e] <vcs project url>
pip wheel [options] [-e] <local project path>
pip wheel [options] <archive url/path>

3.12.2 描述

根据requirement和依赖生成wheel。wheel是一种创建包的格式,具有在安装期间,不需要编译的优点。
为了确保pip能够创建wheel,setup.py必须实现bdist_wheel命令。该命令必须创建一个适合python解析器 调用的wheel,并将其输出到指定文件夹。

3.12.3 参数

  • --no-clean:不清理build文件夹
  • -w,--wheel-dir<dir>:将wheels生成在dir中,默认当前文件夹
  • --no-binary <format_control>:不使用二进制包。
  • --only-binary:不适合用源包
  • --prefer-binary:优先旧包
  • --build-option:支持setup.py bdist_wheel的额外参数
  • --no-build-option:当生成发布资源时,不使用独立包
  • --use-pep517:使用PEP517来进行构建包
  • -c,--constraint <file>:限制文件
  • -e,--editable <path/URL>:在editable模式下安装项目
  • -r,--requirements <file>:安装requirements中的包
  • --src <dir>:检查editable项目的文件夹
  • --ignore-requires-python:忽略Require-python信息
  • --no-deps:不安装依赖包
  • -b,--build<dir>:创建包的文件夹
  • --progress-bar <progess_bar>:以指定类型显示信息
  • --global-option:再调用bdist_wheel命令前额外的全局项
  • --require-hashes:进行hash校验
  • -i,--index-url<url>:根据 url装包
  • --extra-index-url:-i补充
  • --no-index:忽略包索引
  • -f,--find-links<url>:如果是url或者路径,则会在指定的url或路径下寻找.tar.gz或.whl文件进行安装。如果是本地文件夹,则会在本地list中寻找

3.13 pip hash

3.13.1 使用方式

pip hash [options] <file>...

3.13.2 描述

计算本地包的hash值

3.13.3 参数

  • -a,--algorithm<algorithm>:sha256、sha384、sha512

3.14 pip debug

3.12.1 使用方式

pip debug <option>

3.14.2 描述

显示debug信息

3.14.3 参数

  • --plantform<plantform>:仅仅使用适合平台的wheel,默认情况下是当前运行的系统
  • --python-version:确定python解析器的版本(适合wheel的)
  • --implementation<implementation>:适合wheel的python实现方式
  • --abi<abi>:适合wheel的python abi

参考文献

[1] pip官网 https://pypi.org/project/pip/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值