新書推薦:
《
人工智能与大数据:采煤机智能制造
》
售價:NT$
440.0
《
新民说·逝去的盛景:宋朝商业文明的兴盛与落幕(上下册)
》
售價:NT$
790.0
《
我从何来:自我的心理学探问
》
售價:NT$
545.0
《
失败:1891—1900 清王朝的变革、战争与排外
》
售價:NT$
390.0
《
送你一匹马(“我不求深刻,只求简单。”看三毛如何拒绝内耗,为自己而活)
》
售價:NT$
295.0
《
万千心理·我的精神分析之道:复杂的俄狄浦斯及其他议题
》
售價:NT$
475.0
《
荷马:伊利亚特(英文)-西方人文经典影印21
》
售價:NT$
490.0
《
我的心理医生是只猫
》
售價:NT$
225.0
|
編輯推薦: |
本书是高效程序员的敏捷开发修炼秘籍,本书作者杨勇老师,毕业于华中科技大学计算机专业,获硕士学位。从事软件开发和量化交易研究超二十年。曾服务于趋势科技(中国)、IBM、Oracle、百纳(海豚浏览器),先后担任高级软件研发经理、研发副总裁。精通多种开发语言与云计算架构设计。本书清楚、完整地诠释了为什么Python可以,或者说,Python在绝大多数情况下应该是核心编程和系统开发的首选,从语言特性、便捷程度和可拓展性,到纵向的流程设计分析,再到横向的工具、资源和社区支持介绍,组织了大量的实例和技巧,展示了该语言和其生态环境在脚本撰写、资源集成、项目研发、系统设计、数据库管理、科学计算、人工智能等诸多领域内的日益突出的优势,甚至在大型应用程序端媲美 C、C++、Java的出色表现。
|
內容簡介: |
本书先简单介绍了搭建开发环境的相关知识,然后以一个规范的Python项目的文件布局总揽全局,按照编码、单元测试、代码管理、集成测试、撰写技术文档、发布安装包的次序,逐一剖析Python开发中所涉及的规范和工具。书中介绍了基于语义的版本管理、依赖解析、构建打包、代码风格、API文档格式等规范。通过不同开发工具(服务)之间的对比,向读者介绍了poetry、MkDocs、tox、Flake8、Black、Git、GitHub CI、Codecov、GitHub Pages、pre-commit hooks等符合最佳实践的开发工具和服务。随书附赠本书案例源码,获取方式见封底。 本书在讲解上本着知其然,更要知其所以然的求知态度,力求讲清楚技术的来龙去脉。任何Python爱好者都适合阅读此书,且本书更是Python初学者实现向专业开发人员蝶变的推荐书籍,使用本书介绍的最佳实践,可以构建出与优秀开源项目媲美的框架代码,并获得与专业开发者协同工作的能力。
|
關於作者: |
杨勇,毕业于华中科技大学计算机专业,获硕士学位。从事软件开发和量化交易研究超二十年。曾服务于趋势科技(中国)、IBM、Oracle、百纳(海豚浏览器),先后担任高级软件研发经理、研发副总裁。精通多种开发语言与云计算架构设计。在Oracle期间,领导团队与电信巨头Verizon合作开发在线视频点播系统;在百纳期间,带领团队实现年营收过亿。现从事量化投研系统研发,研发的大富翁(Zillionare)投研系统具有高性能、容纳海量数据、完全基于Python设计、软件开发流程和质量管控领先等特点。个人媒体号“量化风云”在全网拥有超过7万名量化人粉丝。
|
目錄:
|
序一 序二 前言 第1章 为什么要学Python1 第2章 构建高效的开发环境10 2.1 选择哪一种操作系统10 2.1.1 Windows下的Linux环境11 2.1.2 Docker方案16 2.1.3 虚拟机方案17 2.1.4 小结17 2.2 集成开发环境17 2.2.1 使用哪一个IDE:VS Code或PyCharm18 2.2.2 VS Code及扩展18 2.3 其他开发环境27 2.3.1 Jupyter Notebook27 2.3.2 Spyder28 第3章 构建Python虚拟环境30 3.1 依赖地狱31 3.2 使用虚拟环境逃出依赖地狱31 3.3 Python包安装工具pip37 3.4 配置VS Code中的解释器37 第4章 项目布局和项目生成向导39 4.1 标准项目布局40 4.1.1 一般性文档41 4.1.2 帮助文档41 4.1.3 API文档41 4.1.4 工程构建配置文件42 4.1.5 代码目录42 4.1.6 单元测试文件目录43 4.1.7 Makefile43 4.1.8 相关工具的配置文件43 4.1.9 tox配置文件43 4.1.10 CI配置文件43 4.1.11 code coverage配置文件44 4.2 项目生成向导44 4.2.1 Cookiecutter44 4.2.2 Python Project Wizard45 4.3 如何使用 Python Project Wizard46 4.3.1 安装Python Project Wizard(PPW)46 4.3.2 生成项目框架47 4.3.3 安装pre-commit hooks47 4.3.4 安装开发依赖48 4.3.5 创建GitHub Repo48 4.3.6 进行发布测试49 4.3.7 设置GitHub CI49 4.3.8 设置Codecov49 4.3.9 设置GitHub Pages49 4.3.10 GitHub自动化脚本50 4.3.11 PPW生成的文件列表51 第5章 poetry:让项目管理轻松一些53 5.1 Semantic Versioning57 5.2 poetry:简洁清晰的项目管理工具60 5.2.1 版本管理64 5.2.2 依赖管理66 5.2.3 虚拟运行时72 5.2.4 构建发行包72 5.2.5 其他重要的poetry命令73 第6章 实现高效的Python编码74 6.1 AI赋能的代码编写74 6.1.1 GitHub Copilot74 6.1.2 Tabnine76 6.2 Type Hint78 6.3 PEP 8:Python代码风格指南82 6.4 lint工具82 6.4.1 Flake883 6.4.2 mypy86 6.5 Formatter工具91 6.6 pre-commit hooks93 第7章 单元测试97 7.1 测试代码的组织98 7.2 Pytest99 7.2.1 测试用例的组装99 7.2.2 Pytest 断言100 7.2.3 Pytest fixture101 7.3 魔法一样的mock105 7.3.1 基础概念与基本使用106 7.3.2 特殊场合下的mock108 7.4 Coverage:衡量测试的覆盖率113 7.5 发布覆盖率报告115 7.6 使用tox实现矩阵化测试116 7.6.1 什么是tox117 7.6.2 tox的工作原理117 7.6.3 如何配置tox118 第8章 版本控制—基于Git和GitHub122 8.1 版本控制的意义122 8.2 版本管理工具Git123 8.2.1 创建Git仓库124 8.2.2 建立与远程仓库的关联:git remote125 8.2.3 保存更改:add、commit、stash等126 8.2.4 与他人同步变更:git push和git pull131 8.2.5 Git标签131 8.3 分支管理134 8.3.1 功能分支136 8.3.2 发布分支137 8.3.3 热修复分支138 8.4 高级Git操作139 8.4.1 分支合并和三路归并139 8.4.2 变基143 8.4.3 分支比较:git diff145 8.4.4 reset与checkout146 8.4.5 gutter change148 8.5 案例:如何追踪代码变化148 8.6 GitHub和GitHub CLI150 8.6.1 安装GitHub CLI150 8.6.2 GitHub CLI的主要命令151 8.6.3 GitHub CLI应用举例153 第9章 持续集成154 9.1 盘点CI软件和在线服务154 9.2 GitHub Actions155 9.2.1 GitHub Actions的架构和概念155 9.2.2 工作流语法概述156 9.3 第三方应用和Actions163 9.3.1 GitHub Pages部署164 9.3.2 构建和发布Docker镜像164 9.3.3 在GitHub上进行发布164 9.3.4 制订发布日志草案164 9.3.5 通知消息165 9.3.6 Giscus165 9.4 通过GitHub CI发布Python库165 第10章 撰写技术文档168 10.1 技术文档的组成168 10.2 两种主要的文档格式170 10.3 rst文档格式170 10.3.1 章节标题(section)170 10.3.2 列表(list)171 10.3.3 表格172 10.3.4 图片173 10.3.5 代码块173 10.3.6 警示文本173 10.4 Markdown文档174 10.4.1 章节标题175 10.4.2 列表175 10.4.3 表格176 10.4.4 插入链接176 10.4.5 插入图片177 10.4.6 代码块178 10.4.7 警示文本178 10.4.8 其他语法179 10.5 两种主要的构建工具179 10.6 使用Sphinx构建文档180 10.6.1 初始化文档结构180 10.6.2 文件重定向181 10.6.3 主控文档和工具链181 10.6.4 生成API文档182 10.6.5 docstring的样式183 10.6.6 混合使用Markdown185 10.7 使用MkDocs构建文档186 10.7.1 配置MkDocs187 10.7.2 更换主题190 10.7.3 文件重定向191 10.7.4 页面引用191 10.7.5 API文档和mkdocstrings192 10.7.6 多版本发布194 10.8 在线托管文档194 10.8.1 RTD195 10.8.2 GitHub Pages195 10.9 结论:究竟选择哪一种技术196 第11章 发布应用198 11.1 以Python库的方式打包和分发198 11.1.1 打包和分发流程199 11.1.2 TestPyPI和PyPI203 11.1.3 pip:Python包管理工具204 11.2 应用程序
|
內容試閱:
|
两年前,笔者偶然间在知乎上浏览到一个话题:在大型项目上,Python是个烂语言吗?截至本书定稿时,这个问题得到了近600万的浏览量,而多数人的看法是,Python并不适合做大型项目。 这是一个典型的认知偏差。一般认为,大型应用多会采用微服务架构进行部署,以满足高性能、高可用和可伸缩性要求。微服务部署的基础是Docker容器。Docker的官方网站的数据显示,基于Python的容器下载量(超过10亿次),与OpenJDK(即Java)的下载量相当。而Java一直被认为是服务器应用的主流开发语言,这项数据表明,在全球范围内,Python已经是大型应用部署的主流开发语言了。 在国内,这种认知偏差的不利影响正在显现:近几年来,相当多的人学习了Python,但数据分析与人工智能领域并不需要这么多Python开发者,如果国内软件工业界也抱着陈旧的认知,拒绝使用Python来开发大型应用程序的话,这样势必导致大量人才的浪费,也会导致国内外Python应用水平进一步拉大。 对于Python不适合开发大型项目的报怨主要有两条:第一条是Python的语言的性能较差,最核心的是由于GIL锁,Python程序难以利用现代CPU的多核性能;第二条则是Python是一门动态语言,在缺乏类型约束的情况下,开发自由度比较高,代码维护比较困难。 实际上,大型应用程序的性能主要是架构问题。通过像Ray这样的Python分布式框架的支持,ChatGPT在2023年4月间就已经支撑了超过1亿月活跃用户,并且目前还不知道这个平台的瓶颈在哪里。究竟有多少应用需要比ChatGPT更为强大的算力呢? 而第二个问题,则是本书致力于解决的核心问题。大型项目往往需要大型研发团队共同协作,如何设置一套好的流程、规范和约定,让团队成员都能像在流水线上一样流畅自然地工作,是成功开发大型项目的关键之一。 关于这个问题,开源社区其实有非常好的实践。开源项目能够只使用非常少的人力资源(而且往往是兼职),就能开发出质量很高的项目,关键就是遵循了优秀的软件开发流程,这样才能随时中断、随时重新开始,并且以高质量减少issue的发生,保证了开发效率的提高。 本书把Python开源社区中广泛使用的开发流程、工具和习惯介绍给读者,从根本上回答了开发大型Python应用,团队应该如何设置开发环境、约定代码风格、管理开发测试质量和代码版本,如何进行持续集成和发布,以及如何撰写和发布技术文档的问题,这正是这本书的编写目的。 全书共分11章,涵盖了Python项目开发的全流程,重点介绍了VS Code(及部分扩展)、Anaconda、pip、poetry、pre-commit、lint工具、Git/GitHub、tox、Codecov、Pytest/Unittest、GitHub CI、Sphinx、MkDocs等多种开发工具,并且通过Python Project Wizard工具,以一套完整的工具链形式提供给读者。 推荐有一定基础且希望更上一层楼的Python开发者,或者团队领导者、项目经理、高级测试和运维人员阅读此书。希望此书能对推动国内软件工业界重新认识Python,更好地使用Python进行开发,发挥一点作用。 在本书写作中,笔者得到了机械工业出版社李晓波老师的大力支持。成书之际,不由得回想起当初一起为本书推敲的那些熬夜的日子,也感谢几年来他的耐心推动。在此特别鸣谢!
|
|