【转】最全的 pip 使用指南,50% 你可能没用过

所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 Python 生态的完备,有数以万计的 Python 爱好者愿意以 Python 为基础封装出各种有利于开发的第三方工具包。

这才使用我们能够以最快的速度开发出一个满足基本需要的项目,而不是每次都重复造轮子。

Python 从1991年诞生到现在,已经过去28个年头了,这其间产生了数以万计的第三方包,且每个包都会不断更新,会有越来越多的版本。

当你在一个复杂的项目环境中,如果没有一个有效的依赖包管理方案,项目的维护将会是一个大问题。

pip 是官方推荐的包管理工具,在大多数开发者眼里,pip 几乎是 Python 的标配。

当然也有其他的包管理工具

  • distutils:仅用于打包和安装,严格来讲不算是包管理工具

  • setuptools:distutils的增强版,扩展了distutils,提供更多的功能,引入包依赖的管理,easy_install就是它的一个命令行工具,引入了 egg 的文件格式。

  • Pipenv:一个集依赖包管理(pip)及虚拟环境管理(virtualenv)的工具

  • 还有其他的,这里不一一列出。

今天的主角是 pip ,大家肯定不会陌生。但我相信不少人,只是熟悉几个常用的用法,而对于其他几个低频且实用的用法,却知之甚少,这两天,我查阅官方文档,把这些用法整理了一下,应该是网络上比较全的介绍。

1. 查询软件包

查询当前环境安装的所有软件包

  1. $ pip list

查询 pypi 上含有某名字的包

  1. $ pip search pkg

查询当前环境中可升级的包

  1. $ pip list --outdated

查询一个包的详细内容

  1. $ pip show pkg

2. 下载软件包

在不安装软件包的情况下下载软件包到本地

  1. $ pip download --destination-directory /local/wheels -r requirements.txt

下载完,总归是要安装的,可以指定这个目录中安装软件包,而不从 pypi 上安装。

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

当然你也从你下载的包中,自己构建生成 wheel 文件

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

3. 安装软件包

使用 pip install <pkg> 可以很方便地从 pypi 上搜索下载并安装 python 包。

如下所示

  1. $ pip install requests

这是安装包的基本格式,我们也可以为其添加更多参数来实现不同的效果。

3.1 只从本地安装,而不从 pypi 安装

  1. # 前提你得保证你已经下载 pkg 包到 /local/wheels 目录下
  2. $ pip install --no-index --find-links=/local/wheels pkg

3.2 限定版本进行软件包安装

以下三种,对单个 python 包的版本进行了约束

  1. # 所安装的包的版本为 2.1.2
  2. $ pip install pkg==2.1.2
  3. # 所安装的包必须大于等于 2.1.2
  4. $ pip install pkg>=2.1.2
  5. # 所安装的包必须小于等于 2.1.2
  6. $ pip install pkg<=2.1.2

以下命令用于管理/控制整个 python 环境的包版本

  1. # 导出依赖包列表
  2. pip freeze >requirements.txt
  3. # 从依赖包列表中安装
  4. pip install -r requirements.txt
  5. # 确保当前环境软件包的版本(并不确保安装)
  6. pip install -c constraints.txt

3.3 限制不使用二进制包安装

由于默认情况下,wheel 包的平台是运行 pip download 命令 的平台,所以可能出现平台不适配的情况。

比如在 MacOS 系统下得到的 pymongo-2.8-cp27-none-macosx_10_10_intel.whl 就不能在 linux_x86_64 安装。

使用下面这条命令下载的是 tar.gz 的包,可以直接使用 pip install 安装。

比 wheel 包,这种包在安装时会进行编译,所以花费的时间会长一些。

  1. # 下载非二进制的包
  2. $ pip download --no-binary=:all: pkg
  3. # 安装非二进制的包
  4. $ pip install pkg --no-binary

3.4 指定代理服务器安装

当你身处在一个内网环境中时,无法直接连接公网。这时候你使用pip install 安装包,就会失败。

面对这种情况,可以有两种方法:

  1. 下载离线包拷贝到内网机器中安装
  2. 使用代理服务器转发请求

第一种方法,虽说可行,但有相当多的弊端

  • 步骤繁杂,耗时耗力
  • 无法处理包的依赖问题

这里重点来介绍,第二种方法:

  1. $ pip install --proxy [user:passwd@]http_server_ip:port pkg

每次安装包就发输入长长的参数,未免有些麻烦,为此你可以将其写入配置文件中:$HOME/.config/pip/pip.conf

对于这个路径,说明几点

  • 不同的操作系统,路径各不相同
  1. # Linux/Unix:
  2. /etc/pip.conf
  3. ~/.pip/pip.conf
  4. ~/.config/pip/pip.conf
  5. # Mac OSX:
  6. ~/Library/Application Support/pip/pip.conf
  7. ~/.pip/pip.conf
  8. /Library/Application Support/pip/pip.conf
  9. # Windows:
  10. %APPDATA%\pip\pip.ini
  11. %HOME%\pip\pip.ini
  12. C:\Documents and Settings\All Users\Application Data\PyPA\pip\pip.conf (Windows XP)
  13. C:\ProgramData\PyPA\pip\pip.conf (Windows 7及以后)
  • 若在你的机子上没有此文件,则自行创建即可

如何配置,这边给个样例:

  1. [global]
  2. index-url = http://mirrors.aliyun.com/pypi/simple/
  3. # 替换出自己的代理地址,格式为[user:passwd@]proxy.server:port
  4. proxy=http://xxx.xxx.xxx.xxx:8080
  5. [install]
  6. # 信任阿里云的镜像源,否则会有警告
  7. trusted-host=mirrors.aliyun.com

3.5 安装用户私有软件包

很多人可能还不清楚,python 的安装包是可以用户隔离的。

如果你拥有管理员权限,你可以将包安装在全局环境中。在全局环境中的这个包可被该机器上的所有拥有管理员权限的用户使用。

如果一台机器上的使用者不只一样,自私地将在全局环境中安装或者升级某个包,是不负责任且危险的做法。

面对这种情况,我们就想能否安装单独为我所用的包呢?

庆幸的是,还真有。

我能想到的有两种方法:

  1. 使用虚拟环境
  2. 将包安装在用户的环境中

虚拟环境,之前写过几篇文章,这里不再展开讲。

今天的重点是第二种方法,教你如何安装用户私有的包?

命令也很简单,只要加上 --user 参数,pip 就会将其安装在当前用户的 ~/.local/lib/python3.x/site-packages 下,而其他用户的 python 则不会受影响。

  1. pip install --user pkg

来举个例子

  1. # 在全局环境中未安装 requests
  2. [root@localhost ~]# pip list | grep requests
  3. [root@localhost ~]# su - wangbm
  4. [root@localhost ~]#
  5. # 由于用户环境继承自全局环境,这里也未安装
  6. [wangbm@localhost ~]# pip list | grep requests
  7. [wangbm@localhost ~]# pip install --user requests
  8. [wangbm@localhost ~]# pip list | grep requests
  9. requests (2.22.0)
  10. [wangbm@localhost ~]#
  11. # 从 Location 属性可发现 requests 只安装在当前用户环境中
  12. [wangbm@ws_compute01 ~]$ pip show requests
  13. ---
  14. Metadata-Version: 2.1
  15. Name: requests
  16. Version: 2.22.0
  17. Summary: Python HTTP for Humans.
  18. Home-page: http://python-requests.org
  19. Author: Kenneth Reitz
  20. Author-email: me@kennethreitz.org
  21. Installer: pip
  22. License: Apache 2.0
  23. Location: /home/wangbm/.local/lib/python2.7/site-packages
  24. [wangbm@localhost ~]$ exit
  25. logout
  26. # 退出 wangbm 用户,在 root 用户环境中发现 requests 未安装
  27. [root@localhost ~]$ pip list | grep requests
  28. [root@localhost ~]$

当你身处个人用户环境中,python 导包时会先检索当前用户环境中是否已安装这个包,已安装则优先使用,未安装则使用全局环境中的包。

验证如下:

  1. >>> import sys
  2. >>> from pprint import pprint
  3. >>> pprint(sys.path)
  4. ['',
  5. '/usr/lib64/python27.zip',
  6. '/usr/lib64/python2.7',
  7. '/usr/lib64/python2.7/plat-linux2',
  8. '/usr/lib64/python2.7/lib-tk',
  9. '/usr/lib64/python2.7/lib-old',
  10. '/usr/lib64/python2.7/lib-dynload',
  11. '/home/wangbm/.local/lib/python2.7/site-packages',
  12. '/usr/lib64/python2.7/site-packages',
  13. '/usr/lib64/python2.7/site-packages/gtk-2.0',
  14. '/usr/lib/python2.7/site-packages',
  15. '/usr/lib/python2.7/site-packages/pip-18.1-py2.7.egg',
  16. '/usr/lib/python2.7/site-packages/lockfile-0.12.2-py2.7.egg']
  17. >>>

4. 卸载软件包

就一条命令,不再赘述

  1. $ pip uninstall pkg

5. 升级软件包

想要对现有的 python 进行升级,其本质上也是先从 pypi 上下载最新版本的包,再对其进行安装。所以升级也是使用 pip install,只不过要加一个参数 --upgrade

  1. $ pip install --upgrade pkg

在升级的时候,其实还有一个不怎么用到的选项 --upgrade-strategy,它是用来指定升级策略。

它的可选项只有两个:

  • eager :升级全部依赖包
  • only-if-need:只有当旧版本不能适配新的父依赖包时,才会升级。

在 pip 10.0 版本之后,这个选项的默认值是 only-if-need,因此如下两种写法是一互致的。

  1. pip install --upgrade pkg1
  2. pip install --upgrade pkg1 --upgrade-strategy only-if-need

以上几乎包含了 pip 的所有常用使用场景,为了方便,我将其整理成一张表格,如果你需要,可以关注我的公众号(Python编程时光),后台回复“pip”,可获取高清无水印图片。

【转】最全的 pip 使用指南,50% 你可能没用过的更多相关文章

  1. 最全的 pip 使用指南,50% 你可能没用过

    所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 Python 生态的完备,有数以万计的 Python 爱 ...

  2. 史上最全面的Elasticsearch使用指南

    Elasticsearch使用指南 Elasticsearch使用指南 前言 ES是什么 什么是全文检索 ES的应用场景 ES的存储结构 第一章:安装 1.下载 2.解压 3.配置 4.启动 5.查看 ...

  3. 史上最全的CSP2019复习指南

    CSP2019复习指南 知识点(大纲)内容参考于本人博客: 近22年NOIP考点一览 算法 基本算法: 模拟.暴力枚举.排序.贪心.递归.递推.贪心.二分.位运算 这些算法不再在此加以赘述,如有考前还 ...

  4. 【SpringCloud技术专题】「Gateway网关系列」(3)微服务网关服务的Gateway全流程开发实践指南(2.2.X)

    开发指南须知 本次实践主要在版本:2.2.0.BUILD-SNAPSHOT上进行构建,这个项目提供了构建在Spring生态系统之上API网关. Spring Cloud Gateway的介绍 Spri ...

  5. 史上最全!信息安全入门指南<转>

    以下所列出的链接均为在线文档,有志于信息安全的爱好者可由此作为入门指南. 背景知识 常规知识 Sun认证-Solaris 9&10安全管理员学习指南 PicoCTF资料 应用软件安全 OWAS ...

  6. 史上最全面的Neo4j使用指南

    Neo4j图形数据库教程 Neo4j图形数据库教程 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.测试 第三章:CQL 1 ...

  7. [Python] pip 简明指南

    安装 1. 使用 apt 安装: $ sudo apt-get install python-pip 截止本文落笔,apt 安装 pip 版本为 1.0,但 pip 最新发行版本为 1.5.6 $ p ...

  8. [转]全图形PPT设计指南

    三.什么时候使用 全图形PPT并不适用于所有时候,一般来说,我们在以下场合可以考虑使用:陈述一个故事.名人简介.产品介绍.读书笔记.心灵鸡汤.生活情趣等. 四.如何制作全图形PPT 全图形PPT的制作 ...

  9. 史上超全面的Neo4j使用指南

    Create by yster@foxmail.com 2018-7-10 我的博客:https://blog.csdn.net/yueshutong123 W3Cschool文档:https://w ...

随机推荐

  1. 异步IO\数据库\队列\缓存\RabbitMQ队列

    本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SS ...

  2. 第7天:Django模板使用与表单

    模板的配置 作为web框架,Django提供了模板,用于编写html代码,模板的设计实现了业务逻辑view与现实内容template的解耦.模板包含两部分: 静态部分: 包含html.css.js 动 ...

  3. Vue组件化和路由

    组件化 组件化是vue的核心思想,它能提高开发效率,方便重复使用,简化调试步骤,提升整个项目的可维护性,便于多人协同开发 组件通信 父组件 => 子组件: 属性props 特性$attrs 引用 ...

  4. linux MySql 的主从复制部署

    MySql 复制 mysql 复制:将某一台主机上的 Mysql 数据复制到其它主机(slaves)上,并重新执行一遍从而实现 当前主机上的 mysql 数据与(master)主机上数据保持一致的过程 ...

  5. Qt下载(多种下载通道+所有版本)

    http://c.biancheng.net/view/3851.html Qt 体积很大,有 1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用国内的镜像网站(较快),或者使用 ...

  6. RK3288之kernel目录结构以及功能

    :~/RK3288/kernel$ ls android include MAINTAINERS security arch init Makefile sound backported-featur ...

  7. 03python面向对象编程3

    案例学习 # notebook.pyimport datetime # Store the next available id for all new notes last_id = 0 class ...

  8. 最小可观(Minimal Observability Problem in Conjunctive Boolean Networks)

    论文链接 1. 什么是 conjunctive Boolean network (CBN) 仅仅包含and运算. 下面这个式子为恒定更新函数 2. 什么是可观 定义在时刻k是CBN的状态为 X(k) ...

  9. 将数据转为tfrecord格式

    假设emo文件夹下,有1,2,3,4等文件夹,每个文件夹代表一个类别 import tensorflow as tf from PIL import Image from glob import gl ...

  10. go语言学习——变量、常量、循环、条件、switch、数组和切片

    1.变量 package main import "fmt" func main() { 个或者多个变量. var a string = "initial" f ...