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