08 Pipenv和Python包管理 明希Python的依赖管理及Pipenv @frostming 我是谁? • 研发效能·持续集成@Tencent • 从 2014 年开始用 Python,前测试,现开发 • 开源爱好者 • Pipenv 维护者之一 队长别开枪,是我! 目录 CONTENTS 为什么需要虚拟环境 为什么需要依赖管理 Pipenv 的简单使用 Python 包管理的未来 为什么需要虚拟环境 你是否遇到过这些问题: • virtualenvwrapper • pew • pyenv-venv • conda • direnv • ... pip ? + 我们为什么需要依赖管理 pip 是否已经足够使用? 它的依赖管理有什么问题? 碰到这些问题,该怎么办? 依赖冲突 $ pip install celery django-celery $ pip install celery $ pip (piptools) • Poetry • 没了 可用工具 Pipenv 的简单使用 • 自动创建、管理虚拟环境,与项目绑定 • 依赖解析、锁定 • 新的requirements.txt规范,基于TOML格式 • 优美的命令行界面 Pipenv Demo Python 包管理的未来 Python 包管理的未来 PEP 517 – 与构建系统无关的配置文件格式 PEP 518 – 在指定Python构建依赖0 码力 | 24 页 | 1.24 MB | 1 年前3
Hello 算法 1.1.0 Python版小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。 1.2 算法是什么 址,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 程序内存管理。每次调用函数时,系统都会在栈顶添加一个栈帧,用于记录函数的上下文信息。在递归 函数中,向下递推阶段会不断执行入栈操作,而向上回溯阶段则会不断执行出栈操作。 5.2 队列 队列(queue)是0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0b5 Python版结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小的内存,容易出现内存不足;堆内存很大,但是由于是动态分配,容易 碎片化,管理堆内存的难度更大、成本更高。 3. 访问栈比访问堆更快,因为栈内存较小、对缓存友好,堆帧分散在很大的空间内,会出 现更多的缓存未命中。 � 为什么数组要求相同类型的元素,而在链表中却没有强调同类型呢? 每当我们打开新的网页,浏览器就会将上一个网页执 行入栈,这样我们就可以通过后退操作回到上一页面。后退操作实际上是在执行出栈。如果要同时支持 后退和前进,那么需要两个栈来配合实现。 ‧ 程序内存管理。每次调用函数时,系统都会在栈顶添加一个栈帧,用于记录函数的上下文信息。在递归 函数中,向下递推阶段会不断执行入栈操作,而向上回溯阶段则会执行出栈操作。 第 5 章 栈与队列 hello‑algo 双向队列就像是栈和队列的组合,或者是两个栈拼在了一起。它表现的是栈 + 队列的逻辑,因 此可以实现栈与队列的所有应用,并且更加灵活。 103 第 6 章 哈希表 � 在计算机世界中,哈希表如同一位智能的图书管理员。 他知道如何计算索书号,从而可以快速找到目标书籍。 第 6 章 哈希表 hello‑algo.com 104 6.1 哈希表 「哈希表 hash table」,又称「散列表」,其通过建立键0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.0.0 Python版小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将 引导你迈入数据结构与算法的知识殿堂。 1.2 算法是什么 些地址,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 � 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉 及地址空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 程序内存管理。每次调用函数时,系统都会在栈顶添加一个栈帧,用于记录函数的上下文信息。在递归 函数中,向下递推阶段会不断执行入栈操作,而向上回溯阶段则会不断执行出栈操作。 5.2 队列 「队列 queue」0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。 1.2 算法是什么 址,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数 据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余 当我们打开新的网页,浏览器就会对上一个网页执 行入栈,这样我们就可以通过后退操作回到上一个网页。后退操作实际上是在执行出栈。如果要同时支 持后退和前进,那么需要两个栈来配合实现。 ‧ 程序内存管理。每次调用函数时,系统都会在栈顶添加一个栈帧,用于记录函数的上下文信息。在递归 函数中,向下递推阶段会不断执行入栈操作,而向上回溯阶段则会不断执行出栈操作。 5.2 队列 队列(queue)是0 码力 | 364 页 | 18.43 MB | 10 月前3
Hello 算法 1.0.0b4 Python版结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小的内存,容易出现内存不足;堆内存很大,但是由于是动态分配,容易 碎片化,管理堆内存的难度更大、成本更高。 3. 访问栈比访问堆更快,因为栈内存较小、对缓存友好,堆帧分散在很大的空间内,会出 现更多的缓存未命中。 4. 数组与链表 hello‑algo.com 64 � 我们打开新的网页,浏览器就会将上一个网页执 行入栈,这样我们就可以通过「后退」操作回到上一页面。后退操作实际上是在执行出栈。如果要同时 支持后退和前进,那么需要两个栈来配合实现。 ‧ 程序内存管理。每次调用函数时,系统都会在栈顶添加一个栈帧,用于记录函数的上下文信息。在递归 函数中,向下递推阶段会不断执行入栈操作,而向上回溯阶段则会执行出栈操作。 5. 栈与队列 hello‑algo.com 1. Q & A � 数据结构的“堆”与内存管理的“堆”是同一个概念吗? 两者不是同一个概念,只是碰巧都叫堆。计算机系统内存中的堆是动态内存分配的一部分,程 序在运行时可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对象和数组 等复杂结构。当这些数据不再需要时,程序需要释放这些内存,以防止内存泄露。相较于栈内 存,堆内存的管理和使用需要更谨慎,不恰当的使用可能会导致内存泄露和野指针等问题。0 码力 | 329 页 | 27.34 MB | 1 年前3
Python 标准库参考指南 3.12 1 字典视图对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.12 上下文管理器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 i 4.13 类型注解的类型 . . . . . . . . . . . 472 12.5.1 dbm.gnu --- GNU 数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 12.5.2 dbm.ndbm --- 新数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . 用于消息验证的密钥哈希 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 15.3 secrets --- 生成管理密码的安全随机数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 15.3.1 随机数 . . . . . . . . .0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.12 1 字典视图对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.12 上下文管理器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 i 4.13 类型注解的类型 . . . . . . . . . . . 472 12.5.1 dbm.gnu --- GNU 数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 12.5.2 dbm.ndbm --- 新数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . 用于消息验证的密钥哈希 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 15.3 secrets --- 生成管理密码的安全随机数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 15.3.1 随机数 . . . . . . . . .0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.13 字典视图对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 i 4.12 上下文管理器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.13 类型注解的类型 . . . . . . . . . . . 492 12.5.2 dbm.gnu --- GNU 数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 12.5.3 dbm.ndbm --- 新数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . 用于消息验证的密钥哈希 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 15.3 secrets --- 生成管理密码的安全随机数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 15.3.1 随机数 . . . . . . . . .0 码力 | 2246 页 | 11.74 MB | 9 月前3
Python 标准库参考指南 3.13 字典视图对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 i 4.12 上下文管理器类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.13 类型注解的类型 . . . . . . . . . . . 488 12.5.2 dbm.gnu --- GNU 数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 12.5.3 dbm.ndbm --- 新数据库管理器 . . . . . . . . . . . . . . . . . . . . . . . . . . 用于消息验证的密钥哈希 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 15.3 secrets --- 生成管理密码的安全随机数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 15.3.1 随机数 . . . . . . . . .0 码力 | 2242 页 | 11.73 MB | 9 月前3
共 127 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13













