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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s概述及核心组件

一、k8s概述 1.1 引言 docker compose 单机编排工具 有企业在用 docker swarm 能够在多台主机中构建一个docker集群 基本淘汰集群化管理处理工具 容器 微服务封装 dockerfile 编写成镜像 然后进行发布 dockerfile 可以写成shell脚本&#xff08;函数做调…

Kafka应用Demo:指派分区订阅消息消费

环境准备 Kafka环境搭建和生产者样例代码与《Kafka应用Demo&#xff1a;按主题订阅消费消息》相同。 消费者代码样例 public class KafkaConsumerService {private static final Logger LOGGER LoggerFactory.getLogger(KafkaConsumerService.class);private static final S…

【DFT】高 K/金属栅极阈值电压偏移的密度泛函模型

文章《Density functional model of threshold voltage shifts at High-K/Metal gates》&#xff0c;是由R. Cao、Z. Zhang、Y. Guo、J. Robertson等人撰写&#xff0c;发表在《Solid-State Electronics》期刊上。通过密度泛函理论&#xff08;Density Functional Theory, DFT&…

Redis(无中心化集群搭建)

文章目录 1.无中心化集群1.基本介绍2.集群说明 2.基本环境搭建1.部署规划&#xff08;6台服务器&#xff09;2.首先删除上次的rdb和aof文件&#xff08;对之前的三台服务器都操作&#xff09;1.首先分别登录命令行&#xff0c;关闭redis2.清除/root/下的rdb和aof文件3.把上次的…

大数据技术架构

一、hadoop 1、基础知识 1.1、概念 ①Hadoop集群特点&#xff1a;高可靠性、高效性、高可拓展性、高容错性、成本低、运行在Linux操作系统上、支持多种编程语言 ②Hadoop的由来&#xff1a; 谷歌的三驾马车对应的开源软件描述GFS&#xff1a;海量数据怎么存HDFS分布式文件…

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…

oracle 数据库找到UDUMP的文件名称

oracle 数据库找到UDUMP的文件名称 select p.value||\||i.instance_name||_ora_||spid||.trc as "trace_file_name" from v$parameter p ,v$process pro, v$session s, (select sid from v$mystat where rownum1) m, v$instance i where lower(p.name)user_dump_…

orbslam2基础

目录 一、 内容概要二、 orbslam2基础介绍三 、 orbslam2安装3.1 安装依赖3.2 安装orbslam23.3 下载Kitee数据集 四、 进行ORBSLAM2仿真五、 心得体会六、 参考链接 一、 内容概要 orbslam2基础介绍orbslam2安装orbslam2使用案例&#xff1a;orbslam2kitti数据集序列图像 二、…

转发_重定向

1.Servlet/JSP单独使用的弊端 当我们用Servlet或者JSP单独处理请求的时候 Servlet&#xff1a;拼接大量的html字符串 造成可读性差、难以维护JSP&#xff1a;使得html和Java代码互相交织 也造成了可读性差、难以维护的后果 最合适的做法就是两者结合使用 2.ServletJSP处理请…

OpenCV4.9如何将失焦图片去模糊滤镜(67)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9的基于距离变换和分水岭算法的图像分割(66) 下一篇 :OpenCV4.9去运动模糊滤镜(68) 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是退化图像模型失焦图像的 PSF 是多少如何恢复…

【Linux调试器】:gdb的使用(常见指令)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux调试器gdb的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

消除模型盲区,让透明件身后模型无所遁形

使用SOLIDWORKS设计产品出工程图&#xff0c;当模型中存在透明零部件时&#xff0c;由于位置摆放可能会遮挡其他零件。 这会影响零件在工程图中展示装配关系。 通常我们会采用剖视图或改变视图方向来展示被遮挡的零件。 SOLIDWORKS 2023版本发布了工程图中透视透明的零部件功能…

分布式锁讲解

概括 分布式锁是一种用于在分布式系统中实现同步机制的锁。在单机系统中&#xff0c;我们可以使用如Java中的synchronized关键字或者 ReentrantLock来实现线程间的同步&#xff0c;但在分布式系统中&#xff0c;由于多个节点&#xff08;服务器&#xff09;之间的并发操作&am…

Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

CVPR2019https://github.com/XuecaiHu/Meta-SR-Pytorch 问题引入 首个解决任意尺度超分问题的模型&#xff0c;借鉴了meta-learning的思想&#xff1b;weight prediction strategy(meta-learning)&#xff1a;神经网络的权重是由另一个神经网络预测的&#xff0c;而不是通过从…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…

PXE批量部署,一键安装配置多台Linux系统

目录 一、PXE批量部署的优点 二、搭建PXE远程安装服务器 1. 实验初始化设置 2. 一键安装软件包 3. 复制 vmlinuz、initrd.img、pxelinux.0文件 4. 配置PE启动菜单配置文件 5. 修改配置文件&#xff0c; 启动各个软件服务 6. kickstart自动应答文件修改启动菜单配置文件…

什么是静态住宅代理IP?

静态住宅代理&#xff08;也称为静态ISP代理&#xff09;是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务&#xff1f;下面我具体分享。 一、什么是静态住宅代理&#xff1f; 首先&#xff0c;我…

【iOS】事件传递与响应机制

文章目录 前言事件UIEvent一、事件传递遍历顺序 二、手势识别三、响应机制UIResponder&#xff08;响应者&#xff09;响应者链 四、相关应用扩大button点击范围穿透事件 总结 前言 提到响应者链与事件传递&#xff0c;如果看过其他人的博客&#xff0c;经常能看到这经典的三张…

苍穹外卖Day06笔记

疯玩了一个月&#xff0c;效率好低&#xff0c;今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency&#xff1f; 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖&#xff0c;而这个依赖低层就引入了httpclinet的依赖&#xff0c;根据依…

Docker部署Metabase

文章目录 Docker安装MetabaseCentOS7安装Docker获取最新的 Docker 镜像启动Metabase容器在Metabase初始化时查看日志访问Metabase Metabase 的 ClickHouse 驱动程序安装环境简介删除容器创建容器下载click house驱动放入驱动重启容器将元数据库连接到 ClickHouse报错解决 Docke…