Python 开发工具链全解
可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码。在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意。有些人在互联网上发现了这一点,其他人却要看自己付出代价后才意识到。还有太多人(特别是非程序员)真的相信除此外没有别的办法了。
这篇文章适用于所有类型的 Python 学习者,因为即使你知道存在替代方案,也难以掌握。 Python的工具链令人困惑,因为有许多软件是相互依赖的,并且它们的关注点也有很多重叠。很难理解它们在 Python 编程体系中的定位。
出于这个原因,我决定列出最重要的工具,它们的使用场景和原因,以及它们解决了什么问题。我将尝试用简单的词语解释你应该如何使用这些工具。如果我在本文中列出了某个工具,这意味着,作为一个Python程序员,你应该至少知道它的存在。我将仅列出可应用于任何项目或工作流的工具,每次启动新项目时都应考虑这些工具。这并不意味着您总是必须在每个项目中使用它们。在某些情况下,太多的工具很容易成为一种负担,并且难以维护。
Setuptools
Setuptools是在Python中创建包的标准方法。它无处不在,有效并发挥了应有的作用。
用途:从源代码构建egg,zip或wheel文件,为项目定义元数据,以结构化和标准化的方式共享代码
场景:基本上每次你想编写应该运行在其他机器上的代码时
替代品:Poetry, Flit
virtualenv
Virtualenv是一个虚拟环境管理器。隔离的虚拟环境可以理解为“安装了独立包的Python版本。使用virtualenv意味着不需要(并且不应该)使用系统默认的python版本来安装软件包。
用途:保持依赖关系分离,在同一系统中支持多个python版本,轻松移动依赖关系
场景:想写代码时,想使用不同于默认版的Python版本时
替代品:Docker或同等产品
Pip
Pip是Python最常用的包管理工具。它允许您获取本地或远程包,并将它们安装在虚拟环境或系统的Python中。
用途:安装和卸载软件包,跟踪正在使用的软件包的版本
场景:任何时候都可以使用
替代品:诗歌,康达
distutils
distutils是setuptools的先驱。后者大量使用来自distutils的功能,因此很多情况下都会用到该工具。这不是你会直接选择使用的工具,但你应该知道它生态中的作用。
Pypi
Pypi是Python Package Index的简称。它存储了所有你可能会用到的Python库。Pip就是从这里获取构建好的包。
用途:发布代码
场景:要公开发布包时
Pypiserver
Pypiserver是Pypi使用的Package Index API的一个实现。您可以用它来配置自己的代码库,例如为整个公司设置并在那里发布包,而不是公开发布。
用途:组织内部共享代码
场景:代码不应公开,希望拥有控制权
替代方案:Warehouse(Pypi使用的库),djangopypi
Poetry
Poetry是也是一个包管理系统,可以取代setuptools,pip和一些建立在它们之上的工具。这个工具,是对Python打包系统的一次全面重构尝试。到目前为止,它得到了一些支持和很多积极的反馈,但它还远远没有成为主流选择。
用途:处理和分发包,管理依赖项
场景有一个新项目而且不怕使用相对小众的工具
替代方案:Pipenv
Pipenv
Pipenv和 Poetry 一样,是一种以更加理智的方式构建Python项目依赖关系和配置的工具。它通过 Pipfile,管理项目的依赖关系,并确保一致性和易用性。
用途:处理和分发包,管理依赖关系
场景:想尝试类似 Poetry 的工具,但希望引起更少的问题
替代方案:Poetry
Sphinx
Sphinx是构建文档的工具。它最初诞生的目的,是处理Python的文档,但现在已经成为了一个通用文档工具。它仍然是Python项目最常见的文档工具。
用途:根据reStructuredText文件,生成PDF或HTML文档
场景:希望为项目提供外部文档,API和代码
替代方案:Docutils,Doxygen
autodoc
autodoc是Sphinx的基本扩展,允许从Python源代码中生成restructuredText文件,其中包含每个类,函数,模块等的条目。
用途:记录代码或API
场景:可能每次使用Sphinx进行项目时
替代方案:autosummary
py.test
py.test在我看来是Python中最好的测试套件。它具有很多功能,但并非所有功能都得到充分的推广,因此需要一些时间来发现该软件支持的丰富可能性
用途:测试代码
场景:什么场景下都需要用的,别犯懒
替代方案:unittest,nose
Hypothesis
Hypothesis是基于属性的测试工具。简单地说,它会根据你提供的规范生成随机测试场景,直到找到导致测试失败的情况。在开始使用此工具之前,请花点时间了解背后的原理。
用途:测试代码,尤其是数据处理
场景:需要使用各种输入数(数字,字符串,结构化数据)测试复杂逻辑时
tox
tox本质上是测试工作中的虚拟环境管理器。这意味着配置测试,让其在一系列干净,可自定义的虚拟环境中运行,以确保代码能够在不同条件下工作。所有这些都不需要任何手动处理。
用途:需要在不同条件和环境中运行的代码。对CI也很有用。
场景:代码需要支持不同的Python版本,在不同的环境和不同的操作系统中运行
替代方案:bash scrips,CI pipeline
pyenv
pyenv是一个python版本管理器。它旨在简化开发人员处理多个版本时的本地工作流程。
用途:运行支持不同python版本的项目
场景:需要使用系统python版本,但是却安装了很多种时
替代品:手动管理,virtualenv,Poetry,Pipenv
PyScaffold
PyScaffold是一种以标准化方式初始化项目结构的工具,并提供我们之前列出的一些工具,而无需手动配置它们。它支持高度定制。
用途:初始化项目;有多个项目,需要统一的工具和结构
场景:各种场景都可以使用(只要你熟悉工具,不要在紧急情况下去尝试新工具)
替代方案:python-project-template,Cookiecutter
flake8
flake8是Python最常用的风格检查工具之一。它运行不同的脚本来验证代码是否符合Python的风格指南要求(PEP-8)。
用途:验证并保证项目中良好的代码风格
当每次您的项目需要被某人阅读时,包括您自己
替代方案:pylint
Black
Black是一个自动代码格式化工具。这意味着Black不会仅仅检查您的代码是否合规,还会实际修改它以使其符合规范。
用途:自动格式化代码
场景:愿意放弃手动控制代码风格
替代方案:autopep8,yapf
Python 开发工具链全解的更多相关文章
- Python 开发工具推荐
对于开发工具,仁者见仁智者见智,关键是自己喜欢,用着顺手就好,不用刻意去追求别人用的是什么工具. 这里给大家主要推荐三款工具,分别是PyCharm.Sublime Text 3.VS Code,因为这 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- 下破解安装Python开发工具WingIDE4.1
步骤: 1.将系统时间调整到一个月之前,然后执行安装. 可以使用date命令调整系统时间,如:date -s '2012-08-14 10:00:00' 2.安装成功后,打开程序,按照提示信息,申请一 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- [Python开发工具] Pycharm之快捷键
[Python开发工具] Pycharm之快捷键 1 全局搜索: Ctrl+Shift+F,不过PyCharm的更强大, 你可以点选左侧某个目录后再按Ctrl+Shift+F, 这样默认会搜索改目录; ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- 常用的python开发工具对比
一名优秀的Python开发人员都有一套好用的Python开发工具,好的开发工具可以使Python开发人员的工作更高效,以下是几款比较好用的Python开发工具,Python开发人员,尤其是初学者,可以 ...
- Python3笔记003 - 1.3 python开发工具
第1章 认识python 1.3 python开发工具 IDLE(python自带的python shell) Pycharm(python开发的,选择专业版) 1.进入IDLE模式: C:\Prog ...
- Python开发工具PyCharm个性化设置(图解)
Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...
随机推荐
- OpenCV-Python 图像金字塔 | 二十
目标 在本章中, 我们将学习图像金字塔 我们将使用图像金字塔创建一个新的水果"Orapple" 我们将看到以下功能:cv.pyrUp(),cv.pyrDown() 理论 通常,我们 ...
- 机器学习中的 7 大损失函数实战总结(附Python演练)
介绍 想象一下-你已经在给定的数据集上训练了机器学习模型,并准备好将它交付给客户.但是,你如何确定该模型能够提供最佳结果?是否有指标或技术可以帮助你快速评估数据集上的模型? 当然是有的,简而言之,机器 ...
- dyld
一.介绍 在 MacOS 和 iOS 上,可执行程序的启动依赖于 xnu 内核进程运作和动态链接加载器 dyld. dyld 全称 the dynamic link editor,即动态链接器,其本质 ...
- 一些常用关键字的用法(一.static)
17:36:26 2020-04-05 又是充实的一天,刚刚开始学习不久java的我,从面向过程的语言转变到面向对象的语言,在思想上上还是需要花费很多时间转变的.今天学习到了这几个关键字了,觉得这几个 ...
- 面试必备:详解Java I/O流,掌握这些就可以说精通了?
@TOC Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题 ...
- A - 无聊的游戏 HDU - 1525(博弈)
A - 无聊的游戏 HDU - 1525 疫情当下,有两个很无聊的人,小A和小B,准备玩一个游戏,玩法是这样的,从两个自然数开始比赛.第一个玩家小A从两个数字中的较大者减去两个数字中较小者的任何正倍数 ...
- 如何让Java应用成为杀不死的小强?(中篇)
各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 上期我们抛了一个砖:“如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否有机制能启动起来?” ...
- VUE CLI3.0安装及配置
# 安装 npm install -g @vue/cli # 查看已安装版本vue --version 或者 vue -V # 卸载 npm uninstall @vue/cli -g # 新建项目 ...
- post登录 jsessionid 以及cookie 传递
先配置登录接口请求 登录成功后: 再其它请求中设置
- 【php】COOKIE和SESSION
一. COOKIE(小甜点,小饼干) a) 生活中的实例: i. 大保健的会员卡(记录你的姓名.性别.ID号码.手机号……) ii. 超市的会员卡(记录你的姓名,性别,会员积分) b) PHP当中的实 ...