python之包管理工具
Table of Contents
背景 #
学习一门语言,首先要了解的就是其包管理工具(想一想,当你打开pycharm并创建第一个python项目时,是不是要选择包管理工具🤔),而Python并不是只有一个包管理工具,因此,如何选择就成了新手们的第一个问题。
pip #
pip是通用的python包管理工具,提供了基本的包管理手段:查找、下载、卸载、更新等。
常用命令 #
- 更新pip源:国内访问国外的网站不稳定,因此最好使用国内的源。
- 永久使用:
pip config set global.index-url {源地址}
- 临时使用:
pip install -i {源地址} {package name}
- 源地址:
- 阿里云:https://mirrors.aliyun.com/pypi/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
- 永久使用:
- 一键导出所使用的pip包:
pip freeze > requirement.txt
- 一键安装所有的pip包:
pip install -r requirement.txt
- 查看pip安装的模块名和版本:
pip list
- 查看pip版本:
pip -v
- 安装模块:
pip install 模块名
- 安装指定版本:
pip install 模块名==版本号
- 卸载模块:
pip uninstall 模块名
缺点 #
pip的缺点就是对每个包一个系统只能安装一个版本,而实际项目中往往需要使用不同的版本。由此诞生了每个项目对“虚拟环境”的需求。
Virtualenv #
为每个项目分配一个独立的虚拟环境能够解决【一个系统只能安装一个版本的包】。
常用命令 #
- 安装:
pip3 install virtualenv
- 搭建虚拟环境:
virtualenv venv
,可指定python解释器:virtualenv -p /usr/bin/python3.6 venv
。 - 激活虚拟环境:
source env/bin/activate
- 停用虚拟环境:
deactivate
缺点 #
- 每个项目使用不同的虚拟环境,每个项目也都有自己的venv文件用于存储包,如果项目多的话,包会占用相当多的磁盘空间。
- 功能简单,只是建立虚拟环境。
- 从操作系统的角度来看,管理virtualenv不方便,需要在各个项目下去查看(于是产生了virtualenvwrapper)。
Virtualenvwrapper #
virtualenvwrapper被用来管理virtualenv。
安装 #
-
pip install virtualenvwrapper
-
vim ~/.bashrc
开始配置virtualenvwrapper:export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
使配置生效:
source ~/.bashrc(或./zshrc)
命令 #
workon
: 打印所有的虚拟环境;mkvirtualenv xxx
: 创建 xxx 虚拟环境,可以–python=/usr/bin/python3.6 指定python版本;workon xxx
: 使用 xxx 虚拟环境;deactivate
: 退出 xxx 虚拟环境;rmvirtualenv xxx
: 删除 xxx 虚拟环境。lsvirtualenv
: 列举所有的环境。cdvirtualenv
: 导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages。cdsitepackages
: 和上面的类似,但是是直接进入到 site-packages 目录中。lssitepackages
: 显示 site-packages 目录中的内容。
PipEnv #
pipenv优化了Virtualenv中没有很好的满足包依赖关系的问题。
命令 #
- 安装:
pip install pipenv
- 为项目创建虚拟环境:
pipenv --python 3.9.9
- 项目目录下会生成一个Pipfile文件,如果系统中没有 3.9.8 版本的Python,pipenv 会调用 pyenv 来安装对应的 Python 的版本。
- 激活虚拟环境:
pipenv shell
- 删除虚拟环境:
pipenv --rm
- 安装指定依赖包:
pipenv install 软件包名称
- 使用国内源安装:
pipenv install --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple 软件包名称
- 删除依赖包:
pipenv uninstall pytest
- 安装项目依赖包(项目已存在Pipfile和Pipfile.lock):
pipenv install
(拉取最新版本的包)、pipenv install --ignore-pipfile
(拉取Pipfile.lock中指定的版本包) - Pipfile.lock文件: Pipfile 中安装的包不包含包的具体版本号,而Pipfile.lock 是包含包的具体的版本号的。
缺点 #
- 锁定文件中的包版本管理存在bug。
- 维护者没有很好的反馈社区提供的问题。
Poetry #
作为一个“更”新的管理工具,poetry解决了pipenv存在的一些问题。
命令 #
- 创建项目版本管理文件pyproject.toml:
poetry init
- 创建项目模版:
poetry new 项目名称
- 创建虚拟环境:
poetry install
- 激活虚拟环境:
poetry shell
- 直接在虚拟环境中执行命令:
poetry run {command}
- 安装包:
poetry add {package}
- 查看所有安装的依赖:
poetry show --tree
- 更新所有锁定版本的依赖:
poetry update
- 卸载一个包:
poetry remove {package}
缺点 #
新的管理工具,还不是很稳定。
PDM #
作者认为pipenv和poetry都不够好用,因此开发了pdm。pdm最大的优点是:
- 不需要安装虚拟环境
- 拥有灵活且强大的插件系统
- 中心化安装缓存,节省磁盘空间
Conda #
在做机器学习时,往往需要使用Anaconda,Anaconda有自己的虚拟环境系统,称为conda。
命令 #
- 创建虚拟环境:
conda create --name environment_name python=3.6
- 激活虚拟环境:
conda activate
- conda环境的卸载:
conda remove -n environment_name --all