python开发工具下所有软件都打不开_Python 开发工具链全解

可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码。在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意。有些人在互联网上发现了这一点,其他人却要看自己付出代价后才意识到。还有太多人(特别是非程序员)真的相信除此外没有别的办法了。

这篇文章适用于所有类型的 Python 学习者,因为即使你知道存在替代方案,也难以掌握。 Python的工具链令人困惑,因为有许多软件是相互依赖的,并且它们的关注点也有很多重叠。很难理解它们在 Python 编程体系中的定位。

出于这个原因,我决定列出最重要的工具,它们的使用场景和原因,以及它们解决了什么问题。我将尝试用简单的词语解释你应该如何使用这些工具。如果我在本文中列出了某个工具,这意味着,作为一个Python程序员,你应该至少知道它的存在。我将仅列出可应用于任何项目或工作流的工具,每次启动新项目时都应考虑这些工具。这并不意味着您总是必须在每个项目中使用它们。在某些情况下,太多的工具很容易成为一种负担,并且难以维护。

RRvJbF3G0jnLGx

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

RRvJbFIBW1WW5c

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用F#库canopy进行UI测试

虽然Selenium是一个流行的UI测试库,但基于它创建的测试却有着脆弱与不可靠等常见的问题。InfoQ与canopy的作者Chris Holt进行了一次访谈,以便更深入地了解canopy这个在Selenium的基础上所创建的F#库。 InfoQ:你能否为我们介绍一下canopy&…

转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

转自: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解) - Java知音号 - 博客园RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 我之前的HTTP开发是…

SpringBoot整合Shiro权限框架

前言 在系统管理中,权限是非常重要的一个环节。目前权限框架中使用比较多的有Shiro、Spring Security。🎃 本篇简单写一下SpringBoot整合Shiro权限框架小栗子🌰。 个人博客地址:SpringBoot整合Shiro权限框架 介绍Shiro Apache S…

Java开发必须掌握的8种网站攻防技术

转载自 Java开发必须掌握的8种网站攻防技术 XSS攻击 XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),是WEB应用程序中最常见到的攻击手段之一。跨站脚本攻击指的是攻击者在网页中嵌入恶意脚本程序, 当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端…

转:json与map互转

转自: java中字符串,json,Map互相转换(各种转换都有)_蜗牛驿站-CSDN博客_java json转map前提:使用jar包为fastjsonimport com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject; 程序如下: …

专属微信二维码python制作_如何利用Python制作简单的公众号二维码关注图

创意配图:微信,微信公众号,微信大V 而且最近发现了一个新的图像处理方面的库—Wand,它是 ImageMagick 库的 Python 接口。于是,我就打算用这个库来实现简单的制作一个二维码关注图,主要是完成以下几个工作&…

如何迁移#SNMP到.NET Core平台的一些体会

.NET Core 依然在飞速进化中,所以如果不是非常喜欢折腾的性格,建议各位还是暂时忍耐。 准备阶段 首先,Visual Studio 2015是必要的开发工具。虽然它已经包含了.NET Core的原始测试版,这里还是推荐下载 RC1 安装包, htt…

JAVA实现一个图片上传预览功能

这个小项目主要使用java实现了一个简单的图片上传预览功能,废话不多说,先上实现成果 ^ _ ^💯 预览 登录页 主页 上传页 图片预览 项目架构 后端: SpringBoot shiro mybatis-plus druid hutool 前端: layui viewer 项目结构 ├─src├…

小程序执行运行过程原理_PLC的基础小知识!不用把PLC想的太难

PLC实质上是工业计算机,是计算机技术与传统继电接触器控制器技术相结合的产物,只不过比一般的计算机具有更强的与工业过程相连接的接口和更直接的适用于工业控制要求的编程语言。一、PLC的结构从硬件结构上看,PLC主要由中央处理单元(CPU)、存…

内部局域网可自行分配的ip地址

【1】有些ip地址很特殊 以 10. 、 172.16. 、172.31. 、192.168. 开头的所有ipv4地址都未分配。 更确切的说,这些地址不会被 ISP(Internet服务提供商)分配给广域网上的计算机,即无法加入全球Internet网络-广域网; 但…

以吃货的角度理解 IaaS,PaaS,SaaS 是什么

转载自 以吃货的角度理解 IaaS,PaaS,SaaS 是什么随着云计算时代的到来,越来越多的软件,开始采用云服务。越来越多的概念也随之而来。云服务只是一个统称,可以分成三大类。IaaS:基础设施服务,Inf…

.Net使用RabbitMQ详解

序言 这几天呢,公司风波再起,去年一年公司CTO换啦4任,CEO换啦三个,这不刚来个新老大,感觉还不错,却没干过3个月又要走,索性趁老大们走来走去的时候,就给自己空出来,稍稍总…

SpringBoot整合Redis要注意的那些

前言 昨天自己在重新学习SpringBoot整合Redis时,遇到了一个问题java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig,错误很明显找不到需要的类。下面主要记录一下错误是怎么出线的,并且如何解决。 错…

Java之Socket与HTTP区别

转自: Java之Socket与HTTP区别 - 曹刚 - 博客园我们都知道TCP/IP协议共分四层:①链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他…

人人都能掌握的Java服务端性能优化方案

转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验。如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响应。这就可能导致用户投诉甚至用户的流失。 关于性…

python模板模式_python-模板方法模式

说明: 模板方法模式时行为模式中比较简单的设计模式之一。模板方法关注这样的一类行为:该类行为在执行过程中拥有大致相同的动作次序,只是动作在实现的具体细节上有所差异。例如:泡茶和泡咖啡,泡茶:把水煮沸…

nacos启动失败:org.springframework.boot.web.server.WebServerExceptio

准备环境 系统环境: windows nacos: 2.0.0-BETA 错误信息 org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat 配置文件…

post使用form-data和x-www-form-urlencoded的本质区别

转自: post使用form-data和x-www-form-urlencoded的本质区别_null-CSDN博客一是数据包格式的区别,二是数据包中非ANSCII字符怎么编码,是百分号转码发送还是直接发送一、application/x-www-form-urlencoded1、它是post的默认格式,…

使用Nancy打造TaskManager2.0管理系统

上一篇开源任务管理平台TaskManager介绍发布后,有网友联系我看看能不能做个后台管理界面,方便管理系统中所有的任务。由于时间和技术问题1.0版本的时候,新增了一个3分钟读取配置文件动态修改任务的功能,不过总体来说还是不直观&am…

Java对象的序列化与反序列化

转载自 Java对象的序列化与反序列化 序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的…