Python 包管理工具(python包管理工具有哪些)

一、Pip

1.1 pip 简介

  Python之所以受欢迎不光是因为它简单易学,更重要的是它有成千上万的宝藏库。这些库相当于是已经集成好的工具,只要安装就能在Python里使用。它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更新维护,有些库越来越强大,几乎能媲美企业级应用。那么这些工具库怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫PyPi(Python Package Index),所有的库安装都是从这里调度。有了仓库之后,还需要有管理员,pip就是这样一个角色。

  pip 是 Python 中的标准库管理器,这意味着它是一个工具,用它可以来管理 Python 标准库中其他的包,允许你安装和管理不属于 Python 标准库的其它软件包,其提供了对 Python 包的查找、下载、安装、卸载等功能。总的来说,pip的Python第三方库的大管家,搞懂它,会让你省很多事。从Python 3 >= Python 3.4 、Python2 >= Python2.7.9 版本开始,pip默认包含在Python的安装程序中,在安装Python时将会自动被安装,省事方便。

  Python 的安装器中自带了 pip,所以你可以直接使用它,除非你安装的是更早版本的 Python。你可以通过以下命令来判断是否已安装:

pip --version # Python2.x 版本命令pip3 --version # Python3.x 版本命令

如果你的 Python 环境没有安装 pip,则可以使用以下方法来手动安装。pip 安装文件下载: pypi.org/project/pip…

# 下载安装脚本curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py# Python2.x 运行安装脚本python get-pip.py# Python3.x 运行安装脚本python3 get-pip.py# 升级 pip 版本, 需要使用 python 的命令来升级python3 -m pip install --upgrade pip

一般情况下,如果同时安装了 Python2 和 Python3,那么 pip 对应的是 Python 2,pip3 对应的是 Python 3。若是只安装了 Python3的话,那么pip和pip3的使用效果是完全相同的。

1.2 pip 常用命令

pip提供的命令不多,但是都很实用

命令

说明

pip –version或者pip -V

查看pip版本

pip install PackageName[==x.y.z]

使用pip安装第三方库,如果后面带有版本号,则安装指定版本

pip uninstall PackageName

安装好的库可以再卸载

pip install –upgrade PackageName

对当前库进行版本升级

pip list

列出所有已安装的第三方库和对应版本

pip check PackageName

验证已安装的库是否有兼容依赖问题

pip list –outdated或者pip list -o

目前已经安装的库中,看哪些需要版本升级

pip show PackageName

显示已安装软件包的信息

pip show –verbose PackageName

显示有关包的所有信息

pip show -f PackageName

查看库信息

pip help

帮助显示命令的帮助

pip config list

查看pip配置

1.3 配置pip镜像

  pip命令默认使用的是国外的pypi镜像(pypi.python.org),安装慢不说,有时甚至会导致出现超时等网络问题,有时候为了安装一个包,失败重试安装好几次都不一定成功。所以,使用国内的pypi镜像,亦即切换 pip 源,这样速度上更有保证,不失为一种加速pip安装第三方包的好方法。常用的镜像站有阿里云、清华大学等。其中清华大学开源软件镜像站是每 5 分钟同步一次的,比较推荐使用。阿里云镜像站的速度也非常快,这也是我现在在使用的。

  切换切换 pip 源可以是临时性的,也可以设置为默认。临时性的,就是在安装包时,通过pip命令的 -i 选项指定镜像源即可。例如,临时使用阿里云镜像站作为 pip 源,可以是这样安装:

# 安装包时,使用-i参数,指定pip源pip install -i https://mirrors.aliyun.com/pypi/simple/ redis

  如果每次安装时都想要通过镜像源来安装,上面的办法不免有些麻烦。我们可以修改pip的配置文件,将镜像源写入到 pip 配置文件中。对于linux系统,修改 ~/.pip/pip.conf文件 (没有就创建一个文件夹及文件,文件夹要加“.”,表示是隐藏文件夹):

# 创建~/.pip/pip.conf命令mkdir ~/.pip && touch ~/.pip/pip.conf

然后在文件中保存如下内容:

[global]# 添加默认下载地址,以阿里云源为例index-url = https://mirrors.aliyun.com/pypi/simple/[install]# 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任trusted-host = mirrors.aliyun.com

  对于windows系统,在C:Users文件夹下的用户目录(例如如果当前用户是Administrator则是C:UsersAdministrator)下创建pip文件夹,然后再在此文件夹下创建pip.ini文件,在文件中写入一下内容:

[global]# 添加默认下载地址,以阿里云源为例index-url = https://mirrors.aliyun.com/pypi/simple/[install]# 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任trusted-host = mirrors.aliyun.com

  配置完成后再通过 pip config list 查看pip配置。

二、Pyenv

  我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项目B依赖包相互独立,互不干扰。为了满足这样的开发需求,我们需要在自己的电脑上安装多个Python版本,并且项目之间进行环境隔离。因此,我们要想运行这些项目,在工作电脑上就要安装不同版本的Python。pyenv 是Python版本管理工具,通过系统修改环境变量来实现Python不同版本的切换,利用它可以在同一台电脑上安装多个版本的Python,设置目录级别的Python,还能创建和管理vitual python enviroments。而且所有的设置都是用户级别的操作,不需要sudo命令。

2.1 安装或升级pyenv

  首先安装pyenv,如果你是Mac电脑,那么推荐使用Homebrew来安装。

brew update && brew install pyenv

要想升级pyenv,则可以执行:

brew update && brew upgrade pyenv

pyenv安装完成后,需要将$HOME/.pyenv/bin添加到PATH变量前面,这一步非常关键。

echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profilesource ~/.bash_profile

也可以采用手动安装的方式,将pyenv检出到你想安装的目录。

git clone git://github.com/yyuu/pyenv.git .pyenvecho 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profileecho 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profilesource ~/.bash_profile

  添加环境变量,将PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv命令的路径。这里的 shell 配置文件(~/.bash_profile)依不同系统而需作修改,如果使用 Zsh 则需要相应的配置 ~/.zshrc
在使用 pyenv 之后使用 pip 安装的第三方模块会自动安装到当前使用 python 版本下,不会和系统模块产生冲突。使用 pip 安装模块之后,如果没有生效,记得使用 pyenv rehash 来更新。

2.2 用pyenv安装Python

安装完pyenv,可以安装Python,首先查看可安装的Python版本:pyenv install -l,接下来开始安装Python

pyenv install <version> # version为版本号# 安装完成后进行更新pyenv rehash

执行命令 pyenv versions 查看安装结果。

# 查看所有已经安装的版本,注:星号指定当前的版本pyenv versions* system (set by /Users/dllwh/.pyenv/version)

可以看到,已经成功安装了Python,安装的位置在 /Users/dllwh/.pyenv。

2.3 Python版本管理

  • pyenv global <version> 全局设置python为指定版本。通过将版本号写入 ~/.pyenv/version 文件的方式,设置全局的 Python 版本,切换完成后,在系统中任何地方执行python,你会发现都是同样的Python版本。
  • pyenv local <version> 属于局部切换,通过将版本号写入当前目录下的 .python-version 文件的方式,修改当前目录下的Python版本,出了当前目录则失效。而且通过这种方式设置的 Python 版本优先级较 global 高。
  • pyenv shell <version> 设置当前shell窗口使用的python版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式,设置shell 的 Python 版本。这个版本的优先级比 local 和 global 都要高。–unset 参数可以用于取消当前 shell 设定的版本。

pyenv global 3.9.9pyenv versionsystem* 3.9.9 (set by /Users/chunming.liu/.pyenv/version)

可以看到,3.9.9 前面有一个星号,说明成功切换到了 3.9.9 版本,可以执行一下python来验证。

三、Pipenv

  Pipenv 是 Python 官方推荐的包管理工具,它综合了 virtualenv、pip 和 pyenv 三者的功能,你可以使用 pipenv 这一个工具来安装、卸载、跟踪和记录依赖性,并创建、使用和组织你的虚拟环境。

3.1 安装和升级pipenv

如果你是Mac电脑,那么推荐使用Homebrew来安装和升级pipenv:

brew update && brew install pipenvbrew update && brew upgrade pipenv

也可以通过pip来安装和升级pipenv:

pip install pipenvpip install --upgrade pipenv

3.2 为项目建立虚拟环境

进入到项目目录中,通过下面的指令为项目创建虚拟环境。

$ mkdir pipenv_demo$ cd pipenv_demo$ pipenv --python 3.9.9Creating a virtualenv for this project…Pipfile: /Users/dllwh/work/pipenv_demo/PipfileUsing /Users/dllwh/.pyenv/versions/3.9.9/bin/python3 (3.9.9) to create virtualenv…⠙ Creating virtual environment...Using base prefix '/Users/dllwh/.pyenv/versions/3.7.7'New python executable in /Users/dllwh/.local/share/virtualenvs/pipenv_demo-RYMSREda/bin/python3Also creating executable in /Users/dllwh/.local/share/virtualenvs/pipenv_demo-RYMSREda/bin/pythonInstalling setuptools, pip, wheel...done.Running virtualenv with interpreter /Users/dllwh/.pyenv/versions/3.7.7/bin/python3✔ Successfully created virtual environment!Virtualenv location: /Users/dllwh/.local/share/virtualenvs/pipenv_demo-RYMSREda

  上面的操作,给pipenv_demo这个项目初始化了一个 Python 3.9.9 的虚拟环境,并在项目录下生成一个项目依赖包文件 Pipefile。如果系统中没有 3.9.8 版本的Python,pipenv 会调用 pyenv 来安装对应的 Python 的版本。默认地,虚拟环境会创建在 ~/.local/share/virtualenvs目录里面。我们也可以通过 pipenv –venv查看项目的虚拟环境目录。可以通过 pipenv –rm 删除虚拟环境。
如果想更改虚拟环境的目录,可以在 .bashrc 或 .bash_profile 中,设置环境变量WORKON_HOME,指定虚拟环境的目录所在位置,比如想将虚拟环境放到~/.venvs目录,则可以执行下面的命令。

echo 'export WORKON_HOME=~/.venvs' >> ~/.bash_profilesource ~/.bash_profile

如果希望在项目目录下创建虚拟环境目录(.venv),需要在 .bashrc 或 .bash_profile 中配置环境变量PIPENV_VENV_IN_PROJECT:

echo 'export PIPENV_VENV_IN_PROJECT=1' >> ~/.bash_profilesource ~/.bash_profile

3.3 用Pipenv管理依赖包

  pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。

3.3.1 安装依赖包

  为项目安装依赖包到虚拟环境中,使每个项目拥有相互独立的依赖包,是非常不错的Python的开发实践。安装依赖包到虚拟环境中的方法:

pipenv install pytest

执行完上面的命令后,检查一下是否安装成功:

pipenv graph

  观察项目的根目录下,又多了一个 Pipfile.lock 文件。这两个文件记录了此项目的依赖包,这两个文件的区别是 Pipfile 中安装的包不包含包的具体版本号,而Pipfile.lock 是包含包的具体的版本号的。如果不想产生 Pipfile.lock 文件,在安装依赖包的时候,加上 –skip-lock 选项即可。
在使用pipenv的时候,常常会安装过程比较慢,这个是因为pipenv创建的 Pipfile 中默认的Pypi源是python官方的 pypi.python.org/simple。我们国内…

pipenv install --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple 软件包名称

  为了避免每次都要指定–pypi-mirror,我一般会在创建好Pipfile以后,将文件中 source 块下的 url 字段,设置为国内的 pypi 源,我推荐的是清华的Pypi源或者阿里源,具体设置如下:

[[source]]# 阿里镜像源url = "https://mirrors.aliyun.com/pypi/simple/"# 清华大学镜像源# url = "https://pypi.tuna.tsinghua.edu.cn/simple"verify_ssl = truename = "pypi"

3.3.2 删除依赖包

如果是要删除虚拟环境中的第三方包,执行:

pipenv uninstall pytest

3.3.3 安装项目所有的依赖包

用git管理项目时候,要把Pipfile和Pipfile.lock加入版本跟踪。这样clone了这个项目的同学,只需要执行:

pipenv install

就可以安装所有的Pipfile中 [packages]部分列出来的包了,并且自动为项目在自己电脑上创建了虚拟环境。

3.3.4 安装pipefile.lock中的依赖包

上面的方法都是安装Pipfile中列出来的第三方包的最新版本,如果是想安装Pipfile.lock中固定版本的第三方依赖包,需要执行:

pipenv install --ignore-pipfile

3.3.5 安装requirements.txt里面的依赖包

如果项目之前使用requirements.txt来管理依赖的,那么使用pipenv安装所有依赖可以采用类似pip的方法:

pipenv install -r requirements.txt

3.4 使用虚拟环境开发

  虚拟环境创建好了之后,就可以在里面进行开发了。如果在命令行下开发,则在项目目录下执行 pipenv shell,就进入到了虚拟环境中,在这个环境中,已经包含安装过的所有依赖包了,接下来就可以利用这些依赖包进行开发工作了。如果是用Pycharm进行开发,就更简单了,直接用Pycharm打开项目即可。可以从Pycharm中的左侧导航栏里面看到External Libraries显示的是虚拟环境中的Python解释器了。
在虚拟环境中执行开发好的程序,有两种方式,一种是前面提到的先执行pipenv shell进入到虚拟环境后,再执行python程序;另一种方式,则是执行pyenv run,比如在虚拟环境中执行基于pytest框架编写的测试用例,只需要执行下面的命令即可:

pipenv run py.test

作者:独泪了无痕
链接:https://juejin.cn/post/7063699409703272485

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年6月22日 上午10:04
下一篇 2022年6月22日 上午10:06

相关推荐