当前位置: 首页 > news >正文

【Python 程序设计】数据人员入门【02/8】

一、说明

        介绍如何管理 Python 依赖项和一些虚拟环境最佳实践。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。迄今为止,本初学者指南包括:

  • 第 1 部分:Python 包:数据人员入门(第 1 部分,共 2 部分),探讨了 Python 模块、Python 包的基础知识以及如何将模块导入您自己的项目。
  • 第 2 部分:Python 包:数据人员入门(第 2 部分,共 2 部分),介绍了依赖项管理和虚拟环境。
  • 第 3 部分:构建 Python 项目的最佳实践,涵盖了构建项目的 9 个最佳实践和示例。
  • 第 4 部分:从 Python 项目到 Dagster 管道,我们探讨了设置 Dagster 项目以及数据资产的关键概念。
  • 第 5 部分:环境变量 在 Python 中,我们将介绍环境变量的重要性以及如何使用它们。
  • 第 6 部分:类型提示,或类型提示如何减少错误。
  • 第 7 部分:工厂模式,或学习设计模式,它们是软件设计中常见问题的可重用解决方案。

        生成更大、更复杂的包时,通常需要使用项目中其他包中的代码。这就是管理依赖关系变得重要的地方。

        让我们谈谈今天 Python 中的依赖管理是什么样子的。我们将涵盖所有内容,包括如何使用新旧方法管理 Python 包、不同的依赖项管理工具以及如何使用虚拟环境管理它们。

目录

  • 管理依赖关系
  • 以旧方式管理依赖项:setup.py
  • 以新方式管理依赖关系:pyproject.toml
  • 安装“附加功能”
  • 替代 Python 依赖管理工具
  • 虚拟环境

二、管理依赖关系

        依赖项是包正常工作所依赖的其他包。跟踪依赖项可能是一项挑战,但有一些工具可以帮助您有效地管理它们。

        其中一个工具是Python Package Index(PyPI),它是开源Python包的中央存储库。可以使用 PyPI 搜索可包含在项目中的包,并使自己的包可供其他人使用。

        在以下各节中,我们将介绍在 Python 项目中管理 依赖项的两种不同方法:使用 的旧方法和使用 的新方法。setup.pypyproject.toml

2.1 以旧方式管理依赖项:setup.py

在引入之前,推荐的方法是使用文件来管理Python项目中的依赖关系。pyproject.tomlsetup.py

setup.py是包含在项目根目录中的文件,其中包含有关包及其依赖项的信息。该文件由 pip(Python 的软件包安装程序)用于安装您的软件包及其依赖项。

下面是一个文件示例:setup.py

from setuptools import setup, find_packagessetup(name='your-package-name',version='0.0.1',description='A brief description of your package',author='Your Name',author_email='your.email@example.com',packages=find_packages(),install_requires=['dependency1','dependency2',],
)
  • 和是必填字段,用于指定包的名称和版本。nameversion
  • 该字段提供包裹的简要说明。description
  • 和字段指定包负责人的姓名和电子邮件地址。该字段指定项目中包含的包。该函数用于自动查找项目中的所有包。authorauthor_emailpackagesfind_packages()
  • 该字段是包正常运行所需的依赖项列表。在此示例中,包依赖于另外两个包,依赖项 1 和依赖项 2。install_requires

若要安装包的依赖项,可以运行以下命令:

pip install -e .

        该选项告诉 pip 执行“可编辑”安装,这允许您对软件包进行更改而无需重新安装它。命令末尾的 指定当前目录,即包的根目录。-e.

        重要的是要注意,当您运行上述命令时,pip 将在全局环境中安装依赖项,这在您处理多个项目时可能会产生问题。此问题已通过虚拟环境解决,本文稍后将对此进行介绍。

2.2 以新方式管理依赖关系:pyproject.toml

   pyproject.toml是一种新的文件格式,用于替换用于管理 Python 项目中依赖项的 setup.py。它是作为PEP 518和PEP 621的一部分引入的。

        这是一个配置文件,pip 用来安装你的包及其依赖项。与它相比,它具有更简单的格式,并且更易于阅读和维护。setup.py

        下面是一个pyproject.toml文件的示例:

[project]
name = "your-package-name"
version = "0.0.1"
description = "A brief description of your package"
authors = ["Your Name <your.email@example.com>"][project.dependencies]
dependency1 = "^1.0"
dependency2 = "^2.0"
  • 和字段是必填字段,并指定包的名称和版本。nameversion
  • 该字段提供包裹的简要说明。description
  • 该字段指定负责包裹的人员的姓名和电子邮件地址。authors
  • 该部分指定包正常运行所需的依赖项。在此示例中,包依赖于另外两个包,并且 。dependenciesdependency1dependency2

就像我们上面讨论的那样,您可以运行以下命令来执行可编辑的安装:

pip install -e .

2.3 安装“附加功能”

让我们谈谈当包具有需要称为“extras”的额外依赖项的可选功能时会发生什么。

如果使用该文件来管理依赖项,则可以通过在函数的参数中包含附加项来指定附加项。例如:setup.pyextras_requiresetup()

setup(...extras_require={'extra_feature': ['dependency3', 'dependency4']}...
)

若要安装额外的依赖项,请运行以下命令:

pip install -e .[extra_feature]

                如果您正在使用该文件,则可以在文件的部分中指定附加内容。例如:pyproject.toml[project.extras]

[project.extras]
extra_feature = ["dependency3", "dependency4"]

        您可以使用相同的命令来安装额外的依赖项,如下所示:

pip install -e .[extra_feature]

        如前所述,该标志代表“可编辑”,它以“开发人员模式”安装包。如果要在发布新版本之前测试任何更改,则可以使用它。-e

        该标志类似于标志,但它也指定应使用“dev”附加功能安装包。还将安装包文件中指定为“dev”的任何其他包或依赖项。这对于安装生产用途不需要的开发特定依赖项非常有用。-e .[dev]-esetup.py

三、替代 Python 依赖管理工具

除了 pip 之外,还有一些替代工具可用于管理 Python 项目中的依赖项。其中一种工具是诗歌

Poetry是Python项目的打包和依赖管理工具。Poetry被设计为比pip更用户友好,具有版本约束解析和自动虚拟环境管理等功能。

使用诗歌的主要优点之一是它的简单性和易用性。Poetry 会自动管理项目的虚拟环境,确保每个项目都有自己的隔离环境及其依赖项。这降低了不同项目之间版本冲突的风险。此外,Poetry 提供了一种简单、简洁的语法,用于指定文件中的依赖项和版本约束。pyproject.toml

但是,使用诗歌也有一些缺点。首先,它不像pip那样被广泛使用,并且在更广泛的Python社区中可能没有得到很好的支持。一些开发人员可能更喜欢 pip 提供的更灵活和可定制的方法。

四、虚拟环境(又名“venvs”)

Python 中的虚拟环境为依赖冲突问题提供了解决方案。默认情况下,所有 Python 包都安装到单个全局命名空间中,这可能会导致单台计算机上不同项目之间的兼容性问题,并导致难以解决冲突。

虚拟环境创建隔离的Python环境,以允许在单独的项目中使用不同版本的Python和库,而不会相互干扰。

这意味着您可以在同一台计算机上拥有多个虚拟环境,每个环境都有自己的一组软件包,而不会相互干扰。

要创建新的虚拟环境,可以使用该命令。例如,要创建名为“myenv”的环境,您需要运行:python -m venv

python -m venv myenv

五、注意:使用 python或python3

如果安装了多个版本的 Python,或者正在使用使用 Python 2 的旧代码,则需要使用显式引用正在使用的 Python 版本的命令。

例如,如果您在计算机上新安装了 Python 3,因此默认情况下您正在使用 Python 3,则无需明确指定。你可以使用其中之一,或者因为它们都引用了Python 3。python3python3python

但是,如果您需要在 Python 2 中使用代码库,但安装了 Python 2 和 3,则使用 将使您能够继续工作而不会破坏任何代码。python

同样的逻辑适用于使用 pip 安装软件包时。pippip3

要激活虚拟环境,您可以使用命令,后跟环境脚本的路径。sourceactivate

在 Linux 和 macOS 上,您将运行:

source myenv/bin/activate

在 Windows 上,您将运行:

myenv\Scripts\activate

激活环境后,运行的任何 Python 脚本或命令都将使用 virtualenv 中的 Python 版本和库,而不是系统的全局版本。

要停用虚拟环境,只需在终端中输入即可。deactivate

您会注意到,当您激活虚拟环境时,命令行提示符会发生变化以指示活动的 venv

myname@mymachine myProject % source myenv/bin/activate
(myenv) myname@mymachine myProject % deactivate
myname@mymachine myProject %

        最佳做法是为每个新项目创建一个特定的虚拟环境,并将其保存在与项目相同的目录中。这使得管理变得容易,并确保所有依赖项都包含在项目文件夹中。

        如果您的虚拟环境位于 Git 存储库中,建议将其添加到您的文件中。这有助于保持存储库清洁,并确保每个开发人员的虚拟环境与 GitHub 存储库隔离。.gitignore

 

相关文章:

【Python 程序设计】数据人员入门【02/8】

一、说明 介绍如何管理 Python 依赖项和一些虚拟环境最佳实践。 以下文章是有关 Python 数据工程系列文章的一部分&#xff0c;旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。迄今为止&#xff0c;本初学者指南包括&#…...

学习笔记——树上哈希

普通子树哈希 树上的很多东西都是转化成链上问题的&#xff0c;比如树上哈希 树上哈希&#xff0c;主要是用于树的同构这个东西上的 什么是树的同构&#xff1f; 如图&#xff0c;不考虑节点编号&#xff0c;三棵树是同构的 将树转化成链&#xff0c;一般有两种方式&#xf…...

Opencv快速入门教程,Python计算机视觉基础

快速入门 OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C 类构成&#xff0c; 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非…...

laravel 报错误信息 Carbon\Exceptions\InvalidFormatException

Carbon\Exceptions\InvalidFormatException Unexpected data found. at vendor\nesbot\carbon\src\Carbon\Traits\Creator.php:687 683▕ return $instance; 684▕ } 685▕ 686▕ if (static::isStrictModeEnabled()) { ➜ 687…...

UI自动化之混合框架

什么是混合框架&#xff0c;混合框架就是将数据驱动与关键字驱动结合在一起&#xff0c;主要用来回归业务主流程&#xff0c;将核心流程串联起来。 上一篇我们写到了关键字驱动框架&#xff0c;关键字驱动框架是针对一个业务场景的单条测试用例的。 我们以163邮箱的登录到创建…...

SQL创建用户-非DM8.2环境(达梦数据库)

DM8:达梦数据库SQL创建用户-非DM8.2环境 环境介绍 环境介绍 在没有图形化界面&#xff0c;或者想快速创建用户&#xff0c;可以使用一下SQL语句&#xff1b;将其中的 CESHI 替换为要创建的用户名即可&#xff0c;默认创建了数据表空间&#xff0c;索引表空间&#xff0c;文件大…...

Thread类中run和start的区别

答&#xff1a;调用线程类中的 start 方法&#xff0c;才开始创建并启动线程&#xff0c;而线程被回收&#xff0c;则是要执行完线程的入口方法&#xff08;对于主线程来说&#xff0c;则是要执行完 main 方法&#xff09;&#xff0c;这里要回收线程则是要将&#xff08;&…...

ElementUI浅尝辄止35:Checkbox 多选框

一组备选项中进行多选 1.如何使用&#xff1f; 单独使用可以表示两种状态之间的切换&#xff0c;写在标签中的内容为 checkbox 按钮后的介绍。 //在el-checkbox元素中定义v-model绑定变量&#xff0c;单一的checkbox中&#xff0c;默认绑定变量的值会是Boolean&#xff0c;选…...

讲讲如何用IDEA开发java项目——本文来自AI创作助手

使用IDEA开发Java项目&#xff0c;您可以按照以下步骤进行操作&#xff1a; 下载并安装IntelliJ IDEA 您可以从JetBrains官网下载并安装最新版的IntelliJ IDEA。 创建项目 启动IDEA&#xff0c;在欢迎界面中选择“Create New Project”或者在主菜单中选择“File”->“Ne…...

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)

目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…...

WeiTools

目录 1.1 WeiTools 1.2 getTime 1.3 getImageView 1.4 StringEncode 1.4.1 // TODO Auto-generated catch block WeiTools package com.shrimp.xiaoweirobot.tools;...

目标检测数据集:医学图像检测数据集(自己标注)

1.专栏介绍 ✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的…...

【系统设计系列】数据库

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemarti…...

mp4压缩视频不改变画质?跟我这样压缩视频大小

在当今数字化时代&#xff0c;视频文件变得越来越普遍&#xff0c;然而&#xff0c;这些文件通常都很大&#xff0c;给存储和传输带来了困难&#xff0c;为了解决这个问题&#xff0c;许多人都希望将视频压缩得更小&#xff0c;而又不牺牲画质&#xff0c;下面就来看看具体应该…...

AQS同步队列和等待队列的同步机制

理解AQS必须要理解同步队列和等待队列之间的同步机制&#xff0c;简单来说流程是&#xff1a; 获取锁失败的线程进入同步队列&#xff0c;成功的占用锁&#xff0c;占锁线程调用await方法进入条件等待队列&#xff0c;其他占锁线程调用signal方法&#xff0c;条件等待队列线程进…...

vue3实现无限循环滚动的方法;el-table内容无限循环滚动的实现

需求&#xff1a;vue3实现一个div内的内容无限循环滚动 方法一&#xff1a; <template><div idcontainer><div class"item" v-foritem in 5>测试内容{{{ item }}</div></div> </template><script setup> //封装一个方法…...

Windows 安装 MariaDB 数据库

之前一直使用 MySQL&#xff0c;使用 MySQL8.0 时候&#xff0c;占用内存比较大&#xff0c;储存空间好像也稍微有点大&#xff0c;看到 MariaDB 是用来代替 MySQL 的方案&#xff0c;之前用着也挺得劲&#xff0c;MySQL8.0 以上好像不能去导入低版本的 sql&#xff0c;或者需要…...

RK3568-mpp(Media Process Platform)媒体处理软件平台

第一章 MPP 介绍 1.1 概述 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。 该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(Medi…...

【ModelSim】使用终端命令行来编译、运行Verilog程序,创建脚本教程

▚ 01 ModelSim命令解说 &#x1f4e2; 这些命令是 ModelSim 中常用的命令&#xff0c;用于创建库、编译源代码和启动仿真。 &#x1f514; 在使用这些命令之前&#xff0c;你需要在 ModelSim 的命令行界面或脚本中执行 vlib 命令来创建一个库&#xff0c;然后使用 vlog 命令…...

腾讯云网站备案详细流程_审核时间说明

腾讯云网站备案流程先填写基础信息、主体信息和网站信息&#xff0c;然后提交备案后等待腾讯云初审&#xff0c;初审通过后进行短信核验&#xff0c;最后等待各省管局审核&#xff0c;前面腾讯云初审时间1到2天左右&#xff0c;最长时间是等待管局审核时间&#xff0c;网站备案…...

HTTP介绍:一文了解什么是HTTP

前言&#xff1a; 在当今数字时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。无论是浏览网页、发送电子邮件还是在线购物&#xff0c;我们都离不开超文本传输协议&#xff08;HTTP&#xff09;。HTTP作为一种通信协议&#xff0c;扮演着连接客户端和服务器的重要角…...

动态规划之子数组系列

子数组系列 1. 环形⼦数组的最⼤和2. 乘积最大子数组3. 等差数列划分4. 最长湍流子数组5. 单词拆分6. 环绕字符串中唯⼀的子字符串 1. 环形⼦数组的最⼤和 1.题目链接&#xff1a;环形⼦数组的最⼤和 2.题目描述&#xff1a;给定一个长度为 n 的环形整数数组 nums &#xff0c…...

LeetCode(力扣)332.重新安排行程Python

LeetCode332.重新安排行程 题目链接代码 题目链接 https://leetcode.cn/problems/reconstruct-itinerary/ 代码 class Solution:def backtracking(self, tickets, used, cur, result, path):if len(path) len(tickets) 1:result.append(path[:])return Truefor i, ticket…...

Pytho 从列表中创建字典 (dict.fromkeys()的问题)

问题起因&#xff1a;想在代码中通过已有的列表创建一个字典&#xff0c;但是又不想写循环&#xff0c;更不想手动填&#xff0c;所以用到了字典对象的fromkeys()方法 。 先以一个简单的例子介绍一下该方法&#xff1a; a ["A", "B", "C", &qu…...

第14节-PhotoShop基础课程-图框工具

文章目录 前言1.矩形画框2.椭圆画框 前言 图框 上面两张图&#xff0c;生成下面一幅图&#xff0c;这个就是图框工具的作用 图框工具ICON 1.矩形画框 2.椭圆画框...

使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

package.json中workspaces详解与monorepo

参考package.json配置详解&#xff0c;让你一看就会&#xff08;下&#xff09; - 掘金...

Spring Boot + Vue的网上商城之商品信息展示

Spring Boot Vue的网上商城之商品信息展示 当实现一个Spring Boot Vue的网上商城的商品信息展示时&#xff0c;可以按照以下步骤进行&#xff1a; 后端实现&#xff1a; 创建一个Spring Boot项目&#xff0c;并添加所需的依赖&#xff0c;包括Spring Web和Spring Data JPA。…...

深度优先搜索遍历与广度优先搜索遍历

目录 一.深度优先搜索遍历 1.深度优先遍历的方法 2.采用邻接矩阵表示图的深度优先搜索遍历 3.非连通图的遍历 二.广度优先搜索遍历 1.广度优先搜索遍历的方法 2.非连通图的广度遍历 3.广度优先搜索遍历的实现 4.按广度优先非递归遍历连通图 一.深度优先搜索遍历 1.深…...

java 中 返回一个空Map

原文链接&#xff1a;Map用法总结 Constructs an empty HashMap with the default initial capacity (16) &#xff08;mutable&#xff09; // Constructs an empty HashMap with the default initial capacity (16) and the default load fact // Since:1.2 Map<String, …...

免费服务器搭建网站详细教程/网站统计数据

在外连接中&#xff0c;where后出现的表等同于内连接&#xff0c;因此&#xff0c;如果用了where条件&#xff0c;就应当将left join改为inner join。以下测试验证了这点。with tab_a as(select 1 id1, 11 id2 from dual union allselect 2 id1, 22 id2 from dual union allsel…...

1元香港虚拟主机/seo网站排名软件

高层框架&#xff1a;TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装&#xff0c;可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题。 尽管Tensorflow也在不断推进Estimator API。但是&#xff0c;这并不是工具的全部。在Tensorflow官方的API方外&am…...

b站准备纸巾/哔哩哔哩b站在线看免费

涉密系统集成资质&#xff0c;是指从事涉密系统业务的单位所需要具备的从事涉及国家秘密活动的资格和保守国家秘密的能力。这里的“涉密系统集成”&#xff0c;包括涉密系统工程的规划、设计、开发、实施、服务及保障等工作。■ 涉密信息系统集成资质申请条件甲级资质系统集成1…...

信誉好的唐山网站建设/经典软文案例200字

第一次接触SpringBoot&#xff0c;根据官网在pom.xml中导入相应依赖后&#xff0c;首先&#xff0c;新建controller包&#xff0c;在其中写HelloController类&#xff1a; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation…...

上海建设银行公司网站/梅州网络推广

第12章 RSS阅读器 现象描述&#xff1a; 源代码运行后效果如图&#xff1a; 但是当点击任意一个ListItem后&#xff0c;本来应该打开浏览此Item详细内容的Activity&#xff0c;可是程序崩溃了&#xff0c;如图&#xff1a; 原因分析&#xff1a; 单步调试后&#xff0c;发现程…...

php做网站需要注意什么/今天热搜前十名

原文地址&#xff1a;https://wenku.baidu.com/view/9d4051f4700abb68a982fb4e.html 嵌入式常见英文缩写和英文词汇 ( 搜集中 ) 英文缩写 ARM &#xff1a; Advanced RISC Machine AAPCS &#xff1a; ARM Architecture Process call standard ARM 体系结构过程调用标准 R…...