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;函数做调…

算法打卡day45

今日任务&#xff1a; 1&#xff09;300.最长递增子序列 2&#xff09;674.最长连续递增序列 3&#xff09;718.最长重复子数组 4&#xff09;复习day20 300.最长递增子序列 题目链接&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组…

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分布式文件…

Android系统 系统音量设置和修改

Android系统拥有多种声音属性&#xff0c;包括有多媒体、通话、通知等声音属性&#xff0c;这些声音属性分别含有自己默认音量、最大音量和最小音量属性。 博主是在Android10源码上修改的&#xff0c;其他版本可以自行搜索文件或者grep “关键字”&#xff0c;参考修改。 一&a…

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

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

MySQL性能优化之参数配置

使用请根据自己服务器配置进行配置 [mysqld] #端口号 port 13306 server-id 1 #log-bin日志路径 log-binD:\Mysql-binlog\mysql-bin binlog-formatROW#设置日志保留天数 expire_logs_days7 #设置日志文件最大大小 max_binlog_size100M# innodb缓冲池大小 innodb_buffer_pool…

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数据集序列图像 二、…

maxpooling2d的C++细节实现

最大池化是一种常见的操作&#xff0c;用于减小输入特征图的大小并提取最显著的特征。PyTorch提供了torch.nn.functional.max_pool2d 函数来执行这个操作&#xff0c;如果不具备pytorch环境&#xff0c;可以通过C实现这个操作&#xff0c;更清楚地了解其原理&#xff1b; PyTo…

转发_重定向

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版本发布了工程图中透视透明的零部件功能…

BUG:conda: command not found解决方法

文章目录 报错信息解决方法 报错信息 conda: command not found解决方法 直接输入 source ~/.bashrc看看这时输入conda有没有显示。如果没有的话,输入 vim ~/.bashrc 输入i进入编辑模式。之后 export PATH$PATH:[你自己conda的安装目录]输入vim的保存命令&#xff1a; ES…

分布式锁讲解

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

hbase建表预分区的2种方法

以下案例建表并设置预分区,分别测试以下2种方法 1.固定散列 示例:rowkey以日期为前缀 create ‘test’,‘cf1’, SPLITS > [‘202401’, ‘202402’, ‘202403’] put ‘test’,‘20240101’,‘cf1:name’,‘20240101’ put ‘test’,‘20240102’,‘cf1:name’,‘2024010…

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;而不是通过从…