仗剑走江湖
Python包管理
Python的版本演变中经历很多个包管理工具,罗列如下:
distutils 、distribute、setuptools、easy_install、pip
它们有些已经成为遗产,有些是当下也可能是未来。
对几个工具做如下梳理与说明:
1.distutils
Python自带的包管理工具,是标准库的一部分。
概述:基于distutils的setup函数(from distutils.core import setup
)编写对应的setup.py ,通过执行setupt.py 进行安装包及打包的操作:
from distutils.core import setup setup(name='foo', version='1.0', py_modules=['foo'],)
python setup.py sdist #发布包
python setup.py install #安装包
2.setuptools 、distribute、 easy_install
setuptools是一个为了增强 distutils 而开发的集合,它包含了 easy_install
这个工具。
setuptools 是一个项目模块,是基础组件。而 easy_install
是这个项目中提供的工具,它依赖基础组件工作。
distribute 是 setuptools 的一个分支版本。目前,distribute 又合并回了 setuptools 中。
easy_install 是setuptools 和 distribute 自带的安装脚本,setuptools 或 distribute安装完后, easy_install便可使用
pip 是目前 python 包管理的事实标准,用来取代 easy_install
后面重点介绍pip
pip
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
目前如果在 python.org 下载最新版本的安装包,则是已经自带了该工具。
Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。
pip 官网:https://pypi.org/project/pip/
官方参考文档:https://pip.pypa.io/en/stable/
1. 安装pip
通过 pip -V
或 pip --version
确认pip是否正确安装
SunnyiMac:~ Sunny$ pip -V pip 20.0.2 from /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pip (python 3.6)
如果没有正确安装,尝试从标准库中对其进行引导
SunnyiMac:~ Sunny$ python3 -m ensurepip --default-pip Looking in links: /var/folders/29/1tq13m7946z0hz0bw0gydrxh0000gn/T/tmpabd_m36r Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (45.2.0) Requirement already satisfied: pip in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (20.0.2)
如果仍然无法运行,通过下述方式安装pip
wget https://bootstrap.pypa.io/get-pip.py python3 get-pip.py # 安装或更新pip,如果没有setuptools,wheel 会自动安装
确保pip, setuptools, wheel 为最新版本
pip install --upgrade pip setuptools wheel
2. 配置pip
pip允许在ini文件中设置所有命令行选项默认值
在不同平台上,配置文件的名称和位置略有不同。 按用户、虚拟环境、全局(在所有用户之间共享)分级配置:
2.1用户级配置:
Unix上,默认配置文件$HOME/.config/pip/pip.conf
,该文件遵循XDG_CONFIG_HOME环境变量。
macOS上,如果目录$HOME/Library/Application Support/pip
存在,则配置文件为$HOME/Library/Application Support/pip/pip.conf
,否则为$HOME/.config/pip/pip.conf
。
Windows上,配置文件为%APPDATA%\pip\pip.ini
。
还有一套老版本的用户级别配置文件规则,目前依然有效位于:
在Unix和macOS上,配置文件为:$HOME/.pip/pip.conf
在Windows上,配置文件为:%HOME%\pip\pip.ini
可以使用环境变量PIP_CONFIG_FILE为该配置文件设置自定义路径位置。
2.2 虚拟环境配置
Unix and macOS 配置文件为 $VIRTUAL_ENV/pip.conf
Windows 配置文件为 %VIRTUAL_ENV%\pip.ini
2.3 全局配置
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 Vista不支持全局配置
如果存在多个配置文件,则它们将按以下顺序组合:
全局级
用户级
虚拟环境级
简单的说:虚拟环境级覆盖用户级,用户级覆盖全局级
配置项目
配置项基于命令行参数
例如:
使用其他程序包索引(--index-url)
HTTP超时(--default-timeout)设置为60秒
[global] timeout = 60 index-url = https://download.zope.org/ppix
对于每个子命令可以在自己部分进行单独配置,以覆盖具有相同名称的全局设置
举例如下:
将freeze 命令超时设置为10s,其他命命令超时设置为60s
[global] timeout = 60 [freeze] timeout = 10
install 命令配置 ignore-installed, no-dependencies
[install] ignore-installed = true no-dependencies = yes
install 配置 no-compile, no-warn-script-location
全局no-cache-dir 配置对所有子命令有效
[global] no-cache-dir = false [install] no-compile = no no-warn-script-location = false
像--find-links附加选项可以写在多行上:
[global] find-links = http://download.example.com [install] find-links = http://mirror1.example.com http://mirror2.example.com
怎么查看相关配置,配置项基于命令行参数
pip --help # 只能看到pip <command> [options]
pip install --help # 子命令输入后加--help,就能看相关子命令的参数
pip同样支持 通过环境变量进行配置:
pip的命令行选项可以使用环境变量设置,格式为PIP_ <UPPER_LONG_NAME>。 短划线(-)必须替换为下划线(_)
设置环境变量export PIP_DEFAULT_TIMEOUT=60
等价
命令行选项pip --default-timeout=60 [...]
配置优先级方面:
- 命令行选项优先于环境变量,环境变量优先于配置文件。
- 在配置文件中,特定命令的部分优先于全局部分。
加餐:
解决pip安装包慢的问题
切换国内源
推荐阿里源
添加如下到pip配置文件
[global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
命令行补齐
pip 支持 bash, zsh and fish
bash安装方式:
$ pip completion --bash >> ~/.profile
具体写那个配置文件,不同系统不一样
macosx为例
$ pip completion --bash >> ~/.bash_profile
安装成功后需要重新加载sh配置
macosx如下:
source ~/.bash_profile
zsh fish 类同
zsh安装方式:
$ pip completion --zsh >> ~/.zprofile
fish安装方式:
$ pip completion --fish > ~/.config/fish/completions/pip.fish
另外,可以直接将完成命令的结果与shell的eval函数一起使用,例如 通过将以下内容添加到启动文件中:
eval "`pip completion --bash`"
3.pip 指令集
pip是一个命令行程序。 安装pip时,会将pip命令添加到系统中,该命令可以从命令提示符处运行,如下所示:
$ pip <pip arguments>
如果在你的环境中无法运行,可能是由于pip所在路径并没有被添加到系统的环境变量PATH中,可以通过python命令运行pip
$ python -m pip <pip arguments>
在Windows环境 py命令可以使用:
$ py -m pip <pip arguments>
3.1.帮助显示
$pip --help
如何查看子命令的帮助
pip install --help # 子命令输入后加--help,就能看相关子命令的参数
3.2. 查看当前pip版本与路径
$pip --version $pip -V
3.3. 安装第三方库
pip 支持从PyPI、版本控制、本地项目以及发布版本多种方式安装包
- 最常见的通过PyPI安装
$ pip install SomePackage # 最新版本 $ pip install SomePackage==1.0.4 # 指定版本 $ pip install 'SomePackage>=1.0.4' # 指定最低版本
- 通过Requirements文件安装
$ pip install -r requirements.txt
从逻辑上讲,requirements.txt只是放置了pip安装参数的列表文件。
关于 requirements.txt文件的格式有时间再另行说明//TODO
3.4. 查看已经安装的第三方库
pip list pip list --outdated:可以查看有更新的第三方库:显示当前版本,以及最新版本
3.5. 查看安装详情
pip show SomePackage
3.6 升级第三方库
$ pip install --upgrade [SomePackage,]
3.7. 卸载第三方库
pip uninstall SomePackage
3.8. 搜索包功能
在包索引中搜索对应的包,查询是模糊的
包索引猜测应该是配置中的index-url配置项,待验证。//TODO
pip search SomePackage
3.9. 导出已安装包的清单
生成一个类似的已安装包列表,但输出使用 pip install 期望的格式。
一个常见的约定是将此列表放在 requirements.txt 文件中:
pip freeze > requirements.txt
4. 卸载pip
python -m pip uninstall pip
也可以直接把pip文件夹删了;建议使用命令后把遗留的文件删除即可。
参考:
来自互联网相关资料
喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。
发布评论…