Python包管理工具

1、python包管理

在java开发生态,我们早已习惯使用maven或者gradle来构建和管理java项目。通过构建工具,我们可以非常方便对项目的依赖、打包、部署等进行管理,极大的减少手工操作的复杂性。

如果使用python开发生态,我们同样可以有类似的包管理工具,那就是pip。pip随python开发环境一起发布,在安装路径的Script目录下。

2、pip与maven的对比

下面是pip和maven之间的一些主要区别和对比:

  1. 配置文件:pip使用简单的文本文件(requirements.txt)来描述软件包的依赖关系,而maven使用更复杂的XML配置文件(pom.xml)来描述项目的依赖关系和构建过程。

  2. 依赖管理:maven具有更强大的依赖管理功能,能够解析和管理复杂的依赖关系。它可以自动下载和管理项目所需的依赖库,并能够递归地解析和解决依赖冲突。pip的依赖管理相对简单,只能解析和管理一级依赖。

  3. 插件支持:maven提供了丰富的插件机制,可以用于执行各种构建、测试和部署任务。pip没有类似的插件机制,只能通过简单的命令行界面完成常见的操作。

总体来说,pip适用于Python开发环境,而maven适用于Java开发环境。它们分别提供了针对不同语言和生态系统的包管理和构建功能。pip主要用于安装和管理依赖包,功能比较单一。而maven是一个全能型的管理。

3、pip常见命令

pip有以下常见命令

命令说明示例
pip install安装指定依赖(不申明表示下载最新版本呢)pip install requests
pip uninstall卸载软件包pip uninstall requests
pip install --upgrade 更新软件包pip install --upgrade requests
pip list列出已安装的软件包pip list

4、pip常见设置

pip依赖安装目录

在Windows系统,pip下载的依赖默认存放于安装目录的Lib\site-packages子目录里。

4.1、更改依赖仓库镜像

有时因为网速或者国外镜像仓库网络距离大,下载不是很顺利。这种情况,我们可以更改下依赖的镜像路径。maven可以配置一系列镜像仓库地址,下载的时候按顺序解析仓库,只有前一个节点无法找到依赖,才会往下一个节点尝试。

    <!-- 阿里云maven仓库 -->
    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
        <repository>
            <id>central</id>
            <name>central</name>
            <url>https://repo1.maven.org/maven2</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

pip只能设置唯一镜像仓库,具体命令如下(也可选择其他国内镜像):

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

4.2、更改依赖安装目录

若需更改依赖的安装目录,执行以下命令:

pip config set global.target E:/piprepo

重新执行下,pip install requests。即可在新的路径下看到下载的依赖。

5、python虚拟环境

5.1、为什么需要虚拟环境

pip最致命的缺点是无法处理同一个依赖多个版本的问题,例如不同项目,对于同一个依赖,可能需求的版本不一致。这个时候,我们就需要使用虚拟环境了。

python构建虚拟环境的工具非常多,从pycharm可以看到:

5.2、Python常见虚拟环境

下面对几款虚拟环境工具做一些简单的介绍。

1.venv:
venv 是一个用于创建和管理虚拟环境的模块。虚拟环境是一个独立于系统环境的 Python 环境,可以用于隔离不同项目的依赖和包。
优点:venv是Python 3.3及更高版本中的标准库,不需要额外安装。它可以创建轻量级且独立的虚拟环境。
缺点:venv仅支持Python 3,并不能同时管理多个Python版本的虚拟环境。

2.virtualenv:
virtualenv是较早的虚拟环境工具,但仍然广泛使用,并且在一些特殊情况下可能是唯一可用的选择,比如使用旧版本的 Python。
优点:virtualenv是最常用和广泛支持的虚拟环境管理工具,可以在Python 2和Python 3上使用。它有丰富的功能,例如可以指定Python解释器版本、使用系统全局安装的包等。
缺点:需要额外安装。

3.conda:
conda 是一个流行的开源的跨平台的包管理系统和环境管理系统,用于在 Python 和其他语言中安装和管理软件包。它是 Anaconda 发行版的核心组件之一,但也可以独立使用。
优点:conda是一个跨平台的包管理系统,可以管理Python包和环境,支持Python 2和Python 3。它可以创建虚拟环境和安装包,并可以管理非Python软件包。另外,conda也可以用于科学计算和数据分析领域,并提供了大量的预编译包。
缺点:conda的包管理功能相对于其他虚拟环境管理工具可能会更复杂一些。

4.pipenv:
功能:pipenv是一个虚拟环境管理和依赖解决工具,结合了pip(包管理工具)和venv(虚拟环境工具)的功能。自动管理虚拟环境、依赖解析、版本锁定、创建和管理虚拟环境,并提供一个简单的CLI来替代pip和venv。
优点:易于使用,对于多人协作项目和部署环境管理非常方便。
缺点:有时候安装和更新依赖可能比较慢,对于大型项目的依赖管理可能会存在一些问题。

5.poetry
poetry是一个完整的虚拟环境和依赖管理工具,它不仅可以管理依赖关系,还可以构建和发布Python包。自动管理虚拟环境、依赖解析、版本控制、构建和发布Python包,并提供一个简洁的命令行界面。
优点:具有强大的依赖解析功能,能够自动处理依赖关系和版本冲突,并提供了一种更简洁的方式来定义和管理项目的依赖关系。
缺点:相对较新,可能在某些方面还不够稳定,对于一些特殊的项目可能会存在一些限制。

总体而言,虚拟环境主要是为了隔离各个python项目的依赖版本冲突问题。相比于maven,python的解决之道只能说差强人意。maven通过建立本地仓库,将各个java项目的依赖及其版本进行统一管理,项目在安装依赖的时候,会首先查看本地依赖有没有已经下载好的,有则直接使用;没有则从远程仓库下载并进行本地安装。每个java项目不会重复下载依赖到项目本地环境,而python的虚拟环境相当于每个本地项目都有一份独立的依赖文件,即使没有版本冲突,也存在重复备份的缺点。

java生态的项目管理工具都是全家桶的,集依赖、打包、测试、部署、发布于一体,ant日落西山,maven纵横江湖,而gradle欣欣向荣,加起来也就三种。而python单依赖管理、环境管理、打包管理等工具就不少于10种,如果再算上构建、发布等工具,就更多了。ฅ(๑ ̀ㅅ ́๑)ฅ (投降!)

5.3、在pychamr使用pipenv

1.命令行安装pipenv

pip install pipenv

2、查看安装结果

pipenv --version

3、如果显示找不到命令,再把下载的pipenv目录添加到系统环境变量。比如笔者的路径:

C:\Users\XXX\AppData\Roaming\Python\Python3\Scripts

4、pycharm使用pipenv

创建成功之后,就可以看到项目目录下有一个Pipfile。

Pipfile是Python中用于管理项目依赖的文件格式。它是根据Pipfile规范创建的,其中包含项目的依赖项和其他相关信息。

传统的pip项目使用requirements.txt文件来描述依赖版本。而pipenv使用功能更完善的pipfile文件。

Pipfile文件通常包含以下内容:

  1. [packages]:列出项目依赖的软件包。每个软件包都有名称和版本要求。

  2. [dev-packages]:列出项目开发过程中需要的软件包。这些软件包通常包含测试框架、代码质量分析工具等。

  3. [[source]]:列出项目使用的软件包源,可以是PyPI等。

  4. [[scripts]]:列出项目中使用的自定义脚本。

pipfile相当于npm的package.json文件。相应地,pipenv也会自动创建一个Pipfile.lock文件,用于锁定项目依赖项的确切版本。它是根据Pipfile文件中列出的软件包及其版本限制生成的,相当于npm的package-lock.json文件

5.在虚拟环境中安装依赖

pipenv install [requests]

如果pipfile文件已经申明依赖及其版本,则可以直接

pipenv install 安装所有依赖。

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jforgame

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值