标签归档:gui

PySimpleGUI Python图形用户界面

用于人类的Python图形用户界面

将tkinter、Qt、WxPython和REMI(基于浏览器)GUI框架转换为更简单的界面。通过使用初学者理解的Python核心数据类型(列表和字典)简化了窗口定义。通过将事件处理从基于回调的模型更改为消息传递模型,可以进一步简化

您的代码不是必填项具有面向对象的体系结构,使包可以被更多的受众使用。虽然体系结构很容易理解,但它并不容易理解。必然限制您只处理简单的问题

但是,有些程序并不能很好地适用于PySimpleGUI。根据定义,PySimpleGUI实现底层GUI框架功能的子集。很难准确定义哪些程序适合PySimpleGUI,哪些不适合。这取决于你的计划的细节。复制Excel的每一个细节就是不太适合PySimpleGUI的一个例子

Japanese version of this readme

我想喝杯咖啡!它支持顾问、编辑、域名注册和PySimpleGUI成为一个蓬勃发展的项目所需的许多其他东西。每一笔捐款都是有帮助的,我们需要并感激帮助。


统计数据📈

PyPI统计信息和版本

Tk TK 2.7 Qt WxPython 网络(REMI)

GitHub统计信息

问题 提交活动 星星 文档


什么是PySimpleGUI❓

PySimpleGUI是一个Python包,它允许所有级别的Python程序员创建GUI。您可以使用包含小部件(在PySimpleGUI中称为“元素”)的“布局”来指定GUI窗口。您的布局用于创建一个窗口,该窗口使用4个受支持的框架之一来显示您的窗口并与之交互。支持的框架包括tkinter、Qt、WxPython或REMI。术语“包装器”有时用于这些类型的包裹

您的PySimpleGUI代码比直接使用底层框架编写的代码更简单、更短,因为PySimpleGUI为您实现了大部分“样板代码”。此外,还简化了接口,以便需要尽可能少的代码即可获得所需的结果。根据使用的程序和框架的不同,PySimpleGUI程序可能需要1/2到1/10的代码量才能直接使用其中一个框架创建相同的窗口

虽然目标是封装/隐藏您在其上运行的GUI框架使用的特定对象和代码,但如果需要,您可以直接访问框架的依赖小部件和窗口。如果尚未使用PySimpleGUIAPI公开或访问设置或功能,则不会将您与框架隔开。您可以扩展功能,而无需直接修改PySimpleGUI包本身

弥合“GUI鸿沟”

Python为编程社区带来了大量的人。项目的数量和涉及的领域之广令人难以置信。但通常情况下,除了少数人之外,所有人都无法接触到这些技术。大多数Python程序都是基于“命令行”的。这对于程序员来说不是问题,因为我们都习惯于通过文本界面与计算机交互。虽然程序员对命令行界面没有问题,但大多数“普通人”都有问题。这造成了一个数字鸿沟,一个“GUI鸿沟”

向程序添加GUI可使该程序向更广泛的受众开放。它变得更加平易近人。GUI还可以使与某些程序的交互变得更容易,即使对于那些熟悉命令行界面的人也是如此。最后,有些问题需要GUI


关于我👋

嗨,你们好!我是迈克。你会发现我就在这里,在PySimpleGUI GitHub上,解决问题,不断推动PySimpleGUI向前发展。我把白天、晚上和周末都奉献给了项目和PySimpleGUI用户。我们的成功最终是共享的。当你成功的时候我就成功了

虽然我是Python的新手,但我从70年代就开始编写软件了。我职业生涯的大部分时间都是在硅谷创造产品。我为PySimpleGUI带来了与我开发的公司产品相同的专业精神和奉献精神。你们现在是我的客户了

项目目标🥅

PySimpleGUI项目最重要的两个目标是:

  • 玩得开心
  • 你的成功

有趣的作为一个严肃项目的目标听起来很奇怪,但这是一个严肃的目标。我发现编写这些GUI程序非常有趣。其中一个原因是编写一个完整的解决方案所需的时间非常短。如果我们不享受这个过程,那么就会有人放弃

这里有大量的文档、一本食谱、100个可让您立即运行的演示程序、详细的通话参考资料、YouTube视频、在线特立尼达演示等等。所有人都在努力创造。有趣的经历

你的成功是一个共同的目标。PySimpleGUI是为开发人员构建的。你们是我的偷窥者。看到用户和PySimpleGUI共同努力的结果是意想不到的回报。使用文档和其他材料帮助构建您的应用程序。如果您遇到麻烦,打开Issue on the PySimpleGUI GitHub请看下面关于支撑的部分


教育资源📚

www.PySimpleGUI.org易于记忆,也是文档所在的位置。您将在顶部找到代表几个不同文档的选项卡。文档位于“Read the Docs”(阅读文档)上,因此每个文档都有一个目录,便于搜索

这里有100页的书面文档和100页的示例程序,它们将帮助您非常迅速地发挥作用。使用PySimpleGUI时,您可以在一个下午完成项目,而不需要几天或几周的投资来学习单个GUI包

示例1-单次窗口

这种类型的程序被称为“一次性”窗口,因为该窗口只显示一次,收集的值,然后关闭。它不会像在文字处理器中那样长时间保持打开状态

一个简单的PySimpleGUI程序剖析

PySimpleGUI程序分为5个部分

import PySimpleGUI as sg                        # Part 1 - The import

# Define the window's contents
layout = [  [sg.Text("What's your name?")],     # Part 2 - The Layout
            [sg.Input()],
            [sg.Button('Ok')] ]

# Create the window
window = sg.Window('Window Title', layout)      # Part 3 - Window Defintion
                                                
# Display and interact with the Window
event, values = window.read()                   # Part 4 - Event loop or Window.read call

# Do something with the information gathered
print('Hello', values[0], "! Thanks for trying PySimpleGUI")

# Finish up by removing from the screen
window.close()                                  # Part 5 - Close the Window

代码将生成此窗口


示例2-交互窗口

在本例中,我们的窗口将一直显示在屏幕上,直到用户关闭窗口或单击Quit按钮。您在前面看到的单次窗口与交互式窗口之间的主要区别在于增加了“事件循环”。事件循环从您的窗口读取事件和输入。应用程序的核心位于事件循环中

import PySimpleGUI as sg

# Define the window's contents
layout = [[sg.Text("What's your name?")],
          [sg.Input(key='-INPUT-')],
          [sg.Text(size=(40,1), key='-OUTPUT-')],
          [sg.Button('Ok'), sg.Button('Quit')]]

# Create the window
window = sg.Window('Window Title', layout)

# Display and interact with the Window using an Event Loop
while True:
    event, values = window.read()
    # See if user wants to quit or window was closed
    if event == sg.WINDOW_CLOSED or event == 'Quit':
        break
    # Output a message to the window
    window['-OUTPUT-'].update('Hello ' + values['-INPUT-'] + "! Thanks for trying PySimpleGUI")

# Finish up by removing from the screen
window.close()

这是示例2生成的窗口

下面是在输入字段中输入值并单击确定按钮后的结果

让我们快速了解一下此示例与单一窗口之间的一些不同之处

首先,您会注意到布局中的不同之处。有两个变化尤其重要。其一是添加了key参数添加到Input元素和一个Text元素。一个key类似于元素的名称。或者,在Python术语中,它就像一个字典键。这个Input元素的键将在稍后的代码中用作字典键

另一个不同之处是增加了这个Text元素:

          [sg.Text(size=(40,1), key='-OUTPUT-')],

有两个参数,即key我们已经调查过了。这个size参数定义元素的大小(以字符为单位)。在这种情况下,我们表示这是Text元素宽40个字符,高1个字符。请注意,没有指定文本字符串,这意味着它将为空。您可以很容易地在创建的窗口中看到此空白行

我们还添加了一个按钮“退出”

Event Loop有我们熟悉的window.read()打电话

以下是Read IF语句:

    if event == sg.WINDOW_CLOSED or event == 'Quit':
        break

这段代码检查用户是否通过单击“X”或单击“Quit”按钮关闭了窗口。如果发生这两种情况中的任何一种,则代码将中断事件循环

如果窗口没有关闭,也没有单击Quit按钮,则继续执行。唯一可能发生的事情是用户单击了“确定”按钮。Event Loop中的最后一条语句如下所示:

    window['-OUTPUT-'].update('Hello ' + values['-INPUT-'] + "! Thanks for trying PySimpleGUI")

此语句更新Text具有密钥的元素-OUTPUT-用一根绳子。window['-OUTPUT-']查找具有键的元素-OUTPUT-那把钥匙属于我们的空白处Text元素。一旦该元素从查找中返回,那么它的update方法被调用。几乎所有元素都有一个update方法。此方法用于更改元素的值或更改元素的某些配置

如果我们希望文本是黄色的,那么可以通过添加一个text_color参数添加到update方法,以便它读取:

    window['-OUTPUT-'].update('Hello ' + values['-INPUT-'] + "! Thanks for trying PySimpleGUI",
                              text_color='yellow')

在添加了text_color参数,这是我们新的结果窗口:

每个元素可用的参数都记录在call reference documentation以及文档字符串。PySimpleGUI提供了大量文档来帮助您了解所有可用的选项。如果您查找update方法,用于Text元素,您将找到该调用的以下定义:

正如您可以看到的,有几件事可以更改为Text元素。调用参考文档是一个有价值的资源,它将使PySimpleGUI、uhm、uhm中的编程变得简单


布局很好笑,哈哈!😆

您的窗口布局是“列表列表”(LOL)。窗户被分解成“行”。窗口中的每一行都会成为布局中的列表。将所有列表连接在一起,您就得到了一个布局。列表列表

这是与以前相同的布局,但增加了一个Text元素添加到每行,以便您可以更轻松地查看行是如何定义的:

layout = [  [sg.Text('Row 1'), sg.Text("What's your name?")],
            [sg.Text('Row 2'), sg.Input()],
            [sg.Text('Row 3'), sg.Button('Ok')] ]

此布局的每一行都是将在窗口的该行上显示的元素列表

与使用其他框架进行GUI编程相比,使用列表定义GUI有一些巨大的优势。例如,您可以使用Python的列表理解功能在一行代码中创建按钮网格

这3行代码:

import PySimpleGUI as sg

layout = [[sg.Button(f'{row}, {col}') for col in range(4)] for row in range(4)]

event, values = sg.Window('List Comprehensions', layout).read(close=True)

生成此窗口,该窗口具有4 x 4网格的按钮:

回想一下,“有趣”是该项目的目标之一。直接将Python强大的基本功能应用于GUI问题非常有趣。创建GUI不需要几页代码,只需要几行(通常是1行)代码

折叠代码

可以将窗口的代码压缩为一行代码。布局定义、窗口创建、显示和数据收集都可以用以下代码行编写:

event, values = sg.Window('Window Title', [[sg.Text("What's your name?")],[sg.Input()],[sg.Button('Ok')]]).read(close=True)

将显示相同的窗口,并返回与显示PySimpleGUI程序部分的示例相同的值。能够用这么少的资源做这么多事情,使您能够快速、轻松地将GUI添加到Python代码中。如果您想要显示某些数据并让用户进行选择,可以在一行代码中完成,而不是在一页代码中完成

通过使用速记别名,您可以使用更少的字符来节省更多的代码空间。所有元素都有一个或多个可以使用的较短名称。例如,Text元素可以简单地写为T这个Input元素可以写成I以及Button作为B这样,您的单行窗口代码就变成了:

event, values = sg.Window('Window Title', [[sg.T("What's your name?")],[sg.I()],[sg.B('Ok')]]).read(close=True)

代码可移植性

PySimpleGUI目前能够在4个Python GUI框架上运行。使用IMPORT语句指定要使用的框架。更改导入,您将更改底层GUI框架。对于某些程序,只需更改import语句即可在不同的GUI框架上运行。在上面的示例中,将导入从PySimpleGUIPySimpleGUIQtPySimpleGUIWxPySimpleGUIWeb将会改变框架

导入语句 结果窗口
PySimpleGUI
PySimpleGUIQt
PySimpleGUIWx
PySimpleGUIWeb

将GUI代码从一个框架移植到另一个框架(例如,将代码从tkinter移植到Qt)通常需要重写代码。PySimpleGUI旨在使您能够轻松地在框架之间移动。有时需要进行一些更改,但目标是以最少的更改获得高度可移植的代码

有些功能(如系统托盘图标)并非在所有端口上都可用。系统托盘图标功能在Qt和WxPython端口上可用。在tkinter上有一个模拟版本。PySimpleGUIWeb端口中不支持系统托盘图标

运行时环境

环境 支持
python Python 3.4+
操作系统 Windows、Linux、Mac
硬件 台式PC、笔记本电脑、Raspberry PI、运行PyDroid3的Android设备
在线 repli.it、Trin ket.com(两者都在浏览器中运行tkinter)
GUI框架 tkinter、pyside 2、WxPython、Remi

集成

在200多个“演示程序”中,您可以找到如何将许多流行的Python包集成到您的GUI中的示例

想要将Matplotlib绘图嵌入到您的窗口中吗?没问题,复制演示代码,立即将您的梦想的Matplotlib绘图放到您的GUI中

这些软件包和更多软件包已准备好放入您的GUI中,因为每个软件包都有演示程序或演示回放:

套餐 描述
Matplotlib 多种类型的图表和曲线图
OpenCV 计算机视觉(通常用于人工智能)
VLC 视频播放
金丝雀 物理引擎
Psutil(伪装) 系统环境统计信息
对虾 Reddit API
JSON PySimpleGUI包装了一个特殊的API来存储“用户设置”
天气 集成多个天气API,制作天气应用程序
米多 MIDI播放
美味的汤 Web抓取(GitHub问题观察器示例)

正在安装💾

安装PySimpleGUI的两种常见方式:

  1. 要从PyPI安装的PIP
  2. 下载文件PySimpleGUI.py并将其放入应用程序的文件夹中

PIP安装和升级

当前建议的调用pip命令的方法是使用Python将其作为模块运行。以前的命令是pippip3是直接放到命令行/shell上的。建议的方式

Windows的初始安装:

python -m pip install PySimpleGUI

Linux和MacOS的初始安装:

python3 -m pip install PySimpleGUI

要使用升级,请执行以下操作pip,您只需向该行添加2个参数--upgrade --no-cache-dir

Windows上的升级安装:

python -m pip install --upgrade --no-cache-dir PySimpleGUI

Linux和MacOS升级:

python3 -m pip install --upgrade --no-cache-dir PySimpleGUI

单文件安装

PySimpleGUI被创建为一个单独的.py文件,因此您可以非常容易地安装它,即使是在不像Raspberry PI那样没有连接到互联网的系统上也是如此。只需将PySimpleGUI.py文件放在与导入它的应用程序相同的文件夹中即可。Python在执行导入时将使用您的本地副本

仅使用.py文件进行安装时,您可以从PyPI获取该文件,或者如果要运行最新的未发布版本,则可以从GitHub下载该文件

要从PyPI安装,请下载控制盘或.gz文件并解压缩该文件。如果将.whl文件重命名为.zip,则可以像打开任何普通zip文件一样打开它。您将在其中一个文件夹中找到PySimpleGUI.py文件。将此文件复制到应用程序的文件夹中,即可完成

PySimpleGUI的tkinter版本的PyPI链接为:https://pypi.org/project/PySimpleGUI/#files

GitHub回购的最新版本可在此处找到:https://raw.githubusercontent.com/PySimpleGUI/PySimpleGUI/master/PySimpleGUI.py

现在你们中的一些人在想,“是的,但是,等等,拥有一个巨大的源文件是一个糟糕的想法”。而且,是的,有时候这可能是个糟糕的主意。在这种情况下,好处远远大于坏处。计算机科学中的许多概念都是权衡或主观的。正如一些人所希望的那样,并不是一切都是黑白分明的。很多时候,问题的答案是“视情况而定”。

画廊🎨

用户提交的GUI以及在GitHub上找到的图形用户界面的更正式图库的工作正在进行中,但在撰写本文时还没有完成。目前有2个地方可以集中查看截图。希望维基或其他机制能够很快发布,以公正地对待人们正在进行的令人惊叹的创作

用户提交的库

第一个是一个user submitted screenshots issue位于GitHub上。这是人们炫耀他们所做的东西的一种非正式方式。这不是很理想,但这是一个开始

海量擦除的GitHub图像

第二个是一个massive gallery of over 3,000 images摘自GitHub上据称使用PySimpleGUI的1000个项目。它没有经过手动过滤,而且有很多早期文档中使用的旧屏幕截图。但是,你可能会在那里发现一些能激发你想象力的东西


PySimpleGUI的用法🔨

以下各节展示了PySimpleGUI的一小部分用法。仅在GitHub上就有1000多个项目使用PySimpleGUI。真正令人惊讶的是,为这么多人打开了这样多的可能性。许多用户谈到以前尝试用Python创建GUI都失败了,但是当他们尝试PySimpleGUI时最终实现了他们的梦想

您的第一个GUI

当然,PySimpleGUI最好的用法之一就是让您为Python项目制作GUI。您可以从请求文件名这样的小操作开始。为此,您只需要对一个名为的“高级函数”进行一次调用popup有各种各样的弹出窗口,有些会收集信息

popup在其自身上会生成一个窗口来显示信息。您可以像打印一样传递多个参数。如果您想要获取信息,那么您将调用以popup_get_比如popup_get_filename

添加一行来获取文件名,而不是在命令行上指定文件名,可以将您的程序转换为“普通人”会感到舒服的程序

import PySimpleGUI as sg

filename = sg.popup_get_file('Enter the file you wish to process')
sg.popup('You entered', filename)

此代码将显示2个弹出窗口。一个用于获取文件名,该文件名可以浏览到输入框或粘贴到输入框中

另一个窗口将输出收集到的内容

雨量计式窗户

GUI框架的默认设置往往不会产生最美观的窗口。但是,只要注意一些细节,就可以做几件事来使窗口看起来很吸引人。PySimpleGUI使操作颜色和功能(如删除标题栏)变得更容易。其结果是,窗口看起来与典型的tkinter窗口不同

下面是一个示例,说明如何创建与Windows中典型的tkinter不同的窗口。在本例中,窗口的标题栏被删除。其结果是,窗口看起来与使用Raineter(桌面小部件程序)时发现的窗口非常相似

您还可以轻松地设置窗口的透明度。下面是相同Raineter样式的更多桌面小部件示例。有些是暗淡的,因为它们是半透明的。

这两种效果(移除标题栏和使窗口半透明)都是通过在创建窗口时设置两个参数来实现的。这是一个PySimpleGUI如何支持轻松访问功能的示例。因为PySimpleGUI代码可以跨GUI框架移植,所以这些相同的参数也适用于其他端口,如Qt

将示例1中的窗口创建调用更改为此行代码会生成类似的半透明窗口:

window = sg.Window('My window', layout, no_titlebar=True, alpha_channel=0.5)

游戏

虽然没有专门编写为游戏开发SDK,但PySimpleGUI使某些游戏的开发变得相当容易

这个象棋程序不仅下棋,而且还集成了Stockfish下棋人工智能

用户已经发布了几个版本的扫雷器

纸牌游戏可以很好地与PySimpleGUI配合使用,因为使用PySimpleGUI操作图像非常简单Graph元素

虽然没有专门编写为游戏开发SDK,但PySimpleGUI使某些游戏的开发变得相当容易

媒体捕获和播放

在GUI中捕获和显示网络摄像头中的视频只需要4行PySimpleGUI代码。更令人印象深刻的是,这4行代码可以与tkinter、qt和Web端口配合使用。您可以使用与使用tkinter显示图像相同的代码在浏览器中实时显示您的网络摄像头。

媒体播放,音频和视频,也可以使用VLC播放器实现。我们为您提供了一个演示应用程序,这样您就可以从一个可操作的示例开始。您在本自述中看到的所有内容都可以作为您自己创作的起点

人工智能

当AI和Python组合在一起时,它们长期以来一直是公认的超级大国。然而,经常缺少的是一种让用户使用GUI熟悉地与这些人工智能算法交互的方式

这些YOLO演示是一个很好的例子,说明了GUI如何在与AI算法的交互中产生巨大的差异。请注意这些窗口底部的两个滑块。这两个滑块更改了YOLO算法使用的几个参数

如果您仅使用命令行调整YOLO演示,则需要在启动应用程序时设置参数一次,查看它们的执行情况、停止应用程序、更改参数,最后使用新参数重新启动应用程序

将这些步骤与使用GUI可以完成的操作进行对比。GUI使您能够实时修改这些参数。您可以立即获得有关它们如何影响算法的反馈

有这么多已经发布的人工智能程序是命令行驱动的。这本身并不是一个巨大的障碍,但是要在命令行上键入/粘贴您想要着色的文件名,运行程序,然后在文件查看器中打开结果输出文件,这已经够“屁股痛”了

图形用户界面有能力改变用户体验,以填补“图形用户界面空白”。在此着色器示例中,用户只需提供一个装满图像的文件夹,然后单击图像即可上色并显示结果

进行着色的程序/算法是免费提供的,随时可以使用。缺少的是GUI可能带来的易用性


作图

使用PySimpleGUI,在GUI中显示数据和与数据交互非常简单。您有几个选择

您可以使用内置的绘图/绘图功能来生成自定义图形。此CPU使用情况监视器使用Graph元素

Matplotlib是Python用户的热门选择。PySimpleGUI可以让您将Matplotlib图形直接嵌入到GUI窗口中。如果您想保留Matplotlib交互功能,甚至可以将交互控件嵌入到您的窗口中

使用PySimpleGUI的颜色主题,您可以生成比大多数人在Matplotlib中创建的默认图表高一个档次的图表


前端

前面提到的“GUI差距”可以使用PySimpleGUI轻松解决。您甚至不需要拥有要添加GUI的程序的源代码。“前端”GUI是一种收集信息,然后将这些信息传递给命令行应用程序的图形用户界面

对于程序员来说,前端GUI是分发用户以前不愿使用的应用程序的绝佳方式,因为他们在使用命令行界面时感到不舒服。对于您无权访问其源代码的命令行程序,这些GUI是您唯一的选择

此示例是名为“Jump Cutter”的程序的前端。通过GUI收集参数,使用这些参数构造命令行,然后使用命令行程序的输出将命令执行到GUI界面。在此示例中,您可以看到执行的命令为黄色


覆盆子猪

因为PySimpleGUI与Python3.4兼容,所以它能够为您的Raspberry PI项目创建GUI。当它与触摸屏搭配使用时,效果特别好。如果PI没有连接监视器,您还可以使用PySimpleGUIWeb来控制PI


轻松访问高级功能

因为很容易访问许多底层GUI框架的功能,所以可以将各种功能拼凑在一起来创建与直接使用GUI框架生成的应用程序完全不同的应用程序

例如,不能使用tkinter或其他GUI包更改标题栏的颜色/外观,但使用PySimpleGUI可以很容易地创建窗口,就好像它们有一个自定义标题栏一样

令人难以置信的是,这个窗口正在使用tkinter来实现类似于屏幕保护程序的功能。

在windows上,tkinter可以从你的应用程序中完全移除背景。再一次,PySimpleGUI使访问这些功能变得微不足道。创建透明窗口需要向创建Window只需更改一个参数,即可生成具有以下效果的简单应用程序:

您可以通过单击全屏窗口与桌面上的所有内容进行交互


主题

厌倦了默认的灰色图形用户界面吗?PySimpleGUI只需调用theme功能。有150多种不同的颜色主题可供您选择:

对于大多数GUI框架,您必须为您创建的每个小部件指定颜色。PySimpleGUI会自动为元素上色,使其与您选择的主题相匹配

若要使用主题,请调用theme在创建窗口之前使用主题名称函数。您可以添加空格以提高可读性。要将主题设置为“Dark Grey 9”,请执行以下操作:

import PySimpleGUI as sg

sg.theme('dark grey 9')

这一行代码完全更改了窗口的外观:

主题更改了背景、文本、输入背景、输入文本和按钮颜色的颜色。在其他GUI包中,要像这样更改配色方案,您需要单独指定每个小部件的颜色,这需要对代码进行大量更改


支持💪

你的第一站应该是documentationdemo programs如果您还有问题或需要帮助。没问题。您可以免费获得帮助。简单地说file an Issue在PySimpleGUI GitHub资源库上,您将获得帮助

几乎所有的软件公司都有一个随附错误报告的表格。这是一笔不错的交易。填写表格,即可获得免费软件支持。此信息可帮助您有效地获得答案

除了请求PySimpleGUI和底层GUI框架的版本号等信息外,还向您提供了一份可能帮助您解决问题的项目清单

请填写这张表格你可能会觉得这毫无意义。这可能会感到痛苦,尽管只需要片刻的时间。它可以帮助您更快地获得解决方案。如果它不是帮助你快速回复和修复的有用和必要的信息,你就不会被要求填写它。“帮我帮你”

支持

我们非常感谢对该项目的财政支持。老实说,经济上的帮助是需要的。光是开着灯就很贵。域名注册、一长串的订阅、咨询帮助等,很快就会累积成一笔可观的经常性成本

PySimpleGUI的创建成本并不低。虽然这是一项热爱的劳动,但在几年的时间里,它是非常辛苦的,而且相当多的投资被投入,并将继续投入,创造出你今天看到的东西。

PySimpleGUI拥有开放源码许可,如果它能保持这种状态,那就太好了。如果您或您的公司(特别是如果您在公司中使用PySimpleGUI)通过使用PySimpleGUI获得经济利益,则您有能力延长您和其他用户的项目生命周期

给我买咖啡

给我买杯咖啡是公开支持开发者的一种很好的方式。它快速、简单,并且您的贡献会被记录下来,这样其他人就可以看到您是PySimpleGUI的支持者。您也可以选择将您的捐赠设置为私人捐赠

GitHub赞助商

这个GitHub recurring sponsorship就是如何在持续的基础上以不同级别的支持来赞助该项目。它是指有多少开放源码开发者能够获得企业级赞助

我们将非常感谢您在财政上对该项目的帮助。作为一名开放源码开发人员在财务上具有挑战性。YouTube视频创建者能够通过制作视频谋生。对于开源开发人员来说,这并不容易

谢谢你的谢谢

对于所有帮助过的人,无论以什么方式,我都非常非常感激

即使花点时间说一句“谢谢”也有帮助,而且你们中的很多人都这么做了。事实上,这是一个令人惊叹的数字。我珍视这些感谢,仅从文字中就能找到灵感。每一条信息都是一种小小的推动。它增加了一点能量,保持了整个项目的势头。我非常感谢所有以任何形式帮助过我的人

贡献👷

虽然PySimpleGUI目前是在开放源码许可下获得许可的,但项目本身的结构类似于专有产品。不接受拉取请求

对您来说,贡献代码的最佳方式之一是编写和发布应用程序。用户从看到其他用户构建的内容中获得灵感。这里有一组您可以执行的简单步骤–创建一个GitHub repo,发布代码,并在repo的自述文件中包含一个屏幕截图。然后回到PySimpleGUI资源库,在第10期或项目的Wiki中发布一个屏幕截图

如果缺少您需要的功能,或者您有要建议的增强功能,那么open an Issue

特别感谢🙏

这个版本的PySimpleGUI自述文件如果没有@M4cs他是一位出色的开发人员,自项目启动以来一直是PySimpleGUI的支持者。@israel-dryer是另一个长期的支持者,他已经编写了几个PySimpleGUI程序,推动了包功能的极限。以色列制造了唯一一艘使用图像作为棋盘的扫雷舰。@jason990420当他发布了第一款使用PySimpleGUI的纸牌游戏(如上图所示),以及第一款使用PySimpleGUI制作的扫雷舰游戏时,许多人都大吃一惊。@Chr0nicT是我合作过的最年轻的项目开发人员。这孩子经常让我吃惊。请求一种功能,比如PySimpleGUI GitHub从错误检查机器人发出的问题,不管涉及到什么技术,它都会简单地发生。我很幸运,我们被介绍认识了。总有一天他会被带走,但在那之前我们都受益于他的才华。日文版的自述文件在以下方面的帮助下得到了极大的改进@okajun35@nngogol对该项目产生了非常大的影响,在最初发布的第一年就参与了PySimpleGUI。他编写了一个设计器,提出了熟悉的窗口[键]查找语法,编写了创建文档的工具,设计了第一组文档字符串,以及使用PySimpleGUI代码本身生成在线文档的工具。如果没有这些人的帮助,PySimpleGUI就不会有今天的成就

使用PySimpleGUI的2200多个GitHub回购也应该得到“谢谢”,因为它是这就是推动这个项目引擎的灵感

隔夜在推特上发帖的海外用户是开始一天PySimpleGUI工作的电光。它们一直是让开发引擎启动并准备好每天运行的正能量源泉。为了表示感谢,本自述文件已翻译为Japanese

你们都是开放源码开发人员所希望的最好的用户社区

©版权所有2021 PySimpleGUI

Youtube-dl-gui-用wxPython编写的流行的youtube-dl的跨平台前端GUI

一款流行的跨平台前端GUIyoutube-dl用wxPython编写的媒体下载器。Supported sites

屏幕截图

要求

下载次数

安装

从源安装

  1. 下载并解压缩源代码
  2. 将目录更改为youtube-dl-gui-0.4
  3. python setup.py install

安装PyPi

  1. pip install youtube-dlg

安装Windows Installer

  1. 下载并解压缩Windows Installer
  2. 运行setup.exe文件

贡献

作者

看见AUTHORS文件

许可证

这个Public Domain License

常见问题解答

看见FAQs文件

谢谢

感谢为这个项目做出贡献的每一个人,感谢@philipzae用于设计新的UI布局

Awesome-python-applications-Python型免费软件,运行良好,而且恰好是开源的💿

令人惊叹的Python应用程序

成功发布Python软件的案例研究

作为开发人员,我们每天都在与代码打交道。您正在阅读这篇文章的站点主要是模块、包、库、框架等。但用户看到的是应用程序

在构建我们自己的应用程序时,开源Python应用程序是我们知道可以协同工作的实用模式的金矿。一个生产应用程序相当于一千篇博客文章和堆栈溢出答案

本文档是一个不断增长的列表,其中包括402按主题排列的开源Python应用程序,带有指向存储库、文档等的链接,生成自structured
data
使用apatite如果您有要添加或找不到的信息,please let us
know
好了!

朗读the announcement post要了解有关此列表的更多信息,请执行以下操作
订阅the RSS/Atom feed要查看添加的新应用程序,请执行以下操作

目录

  1. Internet(34)
  2. Audio(17)
  3. Video(7)
  4. Graphics(20)
  5. Games(10)
  6. Productivity(24)
  7. Organization(41)
  8. Communication(33)
  9. Education(8)
  10. Science(24)
  11. CMS(11)
  12. ERP(5)
  13. Static Site(9)
  14. Dev(178)
    1. SCM(17)
    2. Code Review(4)
    3. Storage(18)
    4. Ops(28)
    5. Security(29)
    6. Docs(7)
    7. Editor(13)
    8. Package Managers(11)
    9. Package Repositories(5)
    10. Build(13)
    11. Shell(3)
    12. Other Dev projects(33)
  15. Misc(13)

Internet

  1. 档案箱-(RepoHomeDocs)自托管Web存档,用于创建来自Web的内容的本地可浏览备份。从Pocket、插接板、浏览器历史记录等导入HTML、JS、PDF、视频、字幕、GIT存储库等。(organization, linux, windows, docker)
  2. 档案学-(RepoHomeDocs)数字保存系统,旨在保持对数字对象集合的基于标准的长期访问,目标客户是档案员和图书馆员。(organization, server)
  3. 布库-(RepoFundDocs)独立于浏览器的书签管理器,具有CLI和Web服务器前端,集成了浏览器、基于云的书签管理器和emacs。(organization, linux, windows, mac, server)
  4. 美声唱法-(RepoWP)RSS守护进程和curses-based client(linux, tui)
  5. CTFd-(RepoHomeDocs)CTFd是一个关注易用性和可定制性的Capture the Flag框架。它提供了运行CTF所需的一切,并且很容易通过插件和主题进行自定义。(server)
  6. 洪水泛滥-(RepoHomeWPFund)流行的、轻量级的、跨平台的BitTorrent客户端。(linux, windows, mac, server, gtk)
  7. 长生不老药-(RepoHomeDocs)功能强大的文件主机和链接缩短器,带API并支持多个虚构URL。(server)
  8. FlaskBB-(RepoHomeDemoDocs)具有现代外观的经典网络论坛应用程序(公告牌)。(server)
  9. gPodder-(RepoHome)简单、成熟的媒体聚合器和播客客户端。(linux, windows, mac, gtk)
  10. 主机-(Repo)合并信誉良好的命令行应用程序hosts files具有重复数据删除功能,目的是通过DNS黑洞阻止不良网站。(security, linux, windows, mac)
  11. HTTPIE-(RepoHomePyPI)具有JSON支持、语法突出显示、类似wget的下载、扩展等功能的命令行HTTP客户端。(dev, linux, windows, mac)
  12. 伊索-(RepoHome)轻量级评论服务器,旨在替代Disqus。(server)
  13. KindleEar-(RepoDocs)Web应用程序自动将RSS聚合为带有图像的定期mobi/epub文件,并将其发送到您的Kindle或电子邮件。(server)
  14. 聚酯薄膜-(Repo)基于Web的自动漫画书下载器(CBR/CBZ),用于SABnzbd、NZBGet和Torrent。(graphics, linux)
  15. Neubot-(RepoHome)为网络中立性研究收集数据的轻量级代理。(linux, windows, mac)
  16. 新闻模糊-(RepoHome)基于网络的个人新闻阅读器。(server, django)
  17. Newspipe-(RepoDemoghDocs)基于网络的新闻聚合器和阅读器。(server)
  18. nsupdate.info-(RepoPyPIDocs)功能强大的动态DNS服务,使用动态DNS更新协议(RFC 2136)更新BIND和其他主要名称服务器。(ops, server)
  19. 尼亚亚-(Repo)为动漫网站构建的BitTorrent跟踪器软件nyaa.si(server)
  20. 交点孔-(RepoHomeWPLinux网络级广告和互联网跟踪器阻止应用程序,其充当DNS天坑,以及(可选的)旨在专用网络上使用的DHCP服务器。(linux, server)
  21. 行星-(RepoHomeWP)RSS和Atom提要聚合器,旨在从Internet社区成员的网络日志中收集帖子并将其显示在单个页面上。习惯于供电Planet Python还有更多。(server)
  22. 波兰人-(RepoHome)Web应用程序,允许用户通过自动生成的RSS订阅源订阅网站上的更改。(server)
  23. PyLoad-(RepoHome)具有Web界面和API的下载管理器。(linux, windows, mac)
  24. Qute浏览器-(RepoHome)键盘驱动、最小、vim详细说明:基于PyQt5的类浏览器。(linux, windows, mac, qt5)
  25. Reddit-(RepoHome)社会新闻论坛,有投票、评论、因果报应等。(2017年起档案回购。)(server)
  26. SABnzbd-(RepoHomeDocs)简单、跨平台的新闻阅读器,可从Usenet下载。支持多种集成和16种语言。(linux, windows, mac, server)
  27. Searx-(RepoDocs)自托管元搜索引擎,聚合来自70多个服务的结果,同时避免跟踪和分析。(security, server, flask)
  28. 速度测试-CLI-(RepoPyPI)用于测试互联网带宽的命令行界面speedtest.net(console)
  29. 流链接-(RepoHomePyPI)命令行实用程序,从各种服务中提取流并将其通过管道传输到所选的视频播放器。(linux, windows, mac)
  30. 同步服务器-(RepoDocs)用于运行自托管Mozilla Firefox同步服务器的一体化软件包。(server)
  31. 特里伯勒-(RepoHomeWP)具有P2P内容发现功能的隐私增强的BitTorrent客户端。(linux, windows, mac, qt5)
  32. 你-得到-(RepoHome)命令行程序,用于无浏览器地从网站抓取和流式传输视频、音频和图像。(linux, windows, mac)
  33. YouTube-dl-(RepoHomePyPI)命令行程序,以无浏览器方式存档来自YouTube和数百个其他站点的视频和音频。(linux, windows, mac)
  34. 零网-(RepoHomeWPDocs)开放、免费和不受审查的网站,使用比特币密码和BitTorrent网络。(linux, windows, mac)

Audio

  1. 甜菜-(RepoHomePyPI)功能丰富的命令行音乐库管理器,具有Web UI、重复检测、代码转换和标记支持,并与MusicBrainz、Discogs等集成。(linux, windows, mac)
  2. Exaile-(RepoWP)跨平台音频播放器、标签编辑器和库管理器。(linux, windows, mac, gtk)
  3. Frescobaldi-(RepoWP)编辑LilyPond音乐文件。(linux, windows, mac, qt)
  4. 火锅-(RepoHome)实时可视化和分析实时音频数据,包括示波器、频谱分析仪、滚动2D频谱图等。(linux, windows, mac, qt5)
  5. 方克鲸(Funkwhale)-(RepoHomeDocs)基于Web的社区驱动型项目,允许您在分散、开放的网络中收听和共享音乐和音频。(server)
  6. GNU无线电-(RepoHomeWP)提供信号处理块以实现软件定义的无线电和信号处理系统的软件开发工具包。(linux, windows, mac, cpp, qt)
  7. GNU SOLFEGE-(RepoWP)一项旨在帮助音乐家提高技能的耳朵训练计划。(linux, windows, mac, gtk)
  8. 莫比迪-(RepoHome)具有广泛服务插件支持的可扩展音乐播放器服务器。(server)
  9. 音乐播放器-(RepoHome)围绕无限智能播放列表设计的简单音乐播放器,支持无头播放。(linux, mac)
  10. MusicBrainz Picard-(RepoHomeWP)自动识别、标记和组织音乐专辑和其他数字音频记录。(linux, windows, mac, qt)
  11. Musikernel-(Repo)一体式数字音频工作站(DAW),带有一套乐器和效果插件。(linux, windows, mac)
  12. PuddleTag-(RepoWP)用于音频文件格式的音频标签(元数据)编辑器。(linux, qt4)
  13. 库德·利贝特-(RepoWP)跨平台音频播放器、标签编辑器和库管理器。(linux, windows, mac, gtk)
  14. SoundConverter-(RepoWP)基于GNOME的音频文件转码器。(linux, gtk)
  15. 声音颗粒-(RepoHomeFund)为绘制和编辑轨迹而设计的图形界面,以控制granular sound synthesis(linux, windows, mac)
  16. 苏比索尼克-(Repo)实施Subsonic server API,支持浏览、流式传输、转码、滚动等。(server)
  17. 搅拌机-(Repo)基于CLI的CD Audio Ripper专为精确度高于速度而设计,支持覆盖硬件缓存、精确度验证、MusicBrainz元数据查找、隐藏曲目、FLAC等。(linux)

Video

  1. 流叶-(RepoWP)Linux下的多轨、非线性视频编辑软件。(linux, gtk)
  2. 开放式流媒体平台-(Repo)自托管视频流和录制服务器,设计为Twitch和YouTube的替代品。(games, server)
  3. Openshot-(RepoHomeWPFund)适用于FreeBSD、Linux、MacOS和Windows的跨平台视频编辑器。(linux, windows, mac, qt5)
  4. 皮蒂维-(RepoWP)Linux下的非线性视频编辑器,基于GStreamer。(linux, gtk)
  5. 梅花-(RepoWP)基于WEB的视频分享内容管理系统Plone(cms, server, plone)
  6. PyVideo-(RepoHome)静电媒体索引是为python社区定制的,以及我们的会议和会议产生的所有内容。(static_site, linux, server)
  7. 视频切割机-(Repo)GUI和CLI的目标是成为剪切和加入视频的最快、最简单的方式。(linux, windows, mac)

Graphics

  1. 把这个卡通化/画出来-(RepoHome)把一张照片变成一幅蹒跚学步的图画。自动的!(console, docker, hardware)
  2. 库拉-(RepoHomeWPDocs)用于准备和控制3D打印的流行桌面软件,与CAD工作流程集成。(linux, windows, mac, corp, hardware)
  3. 牵引式机器人-(RepoHomeWP)用于MacOSX的强大的可编程2D绘图应用程序,可从Python脚本生成图形。(education, dev, mac)
  4. FreeCAD-(RepoWP通用参数化三维CAD建模器和支持有限元(FEM)的建筑信息建模(BIM)软件。(linux, windows, mac, cpp, qt)
  5. 加弗尔-(RepoDocs)简单UML专为初学者设计的建模工具。(docs, linux, windows, mac, flatpak, gtk)
  6. 电路板-(Repo)桌面电子书阅读器和浏览器,支持多种格式,包括漫画存档。(linux)
  7. MakeHuman-(RepoWP3)为照片真实感人形原型设计的3D计算机图形软件。(linux, windows, mac, qt)
  8. 展览厅-(RepoHome)摄影测量管道,用于将照片转换为3D模型。(linux, windows, mac, qt)
  9. 聚酯薄膜-(Repo)基于Web的自动漫画书下载器(CBR/CBZ),用于SABnzbd、NZBGet和Torrent。(internet, linux)
  10. 我的画-(RepoHomeWP)用于数字画家的光栅图形编辑器,重点放在绘画上,而不是图像处理上。(linux, windows, mac, gtk)
  11. NFO查看器-(RepoHome)一个用于NFO文件和其中的ASCII艺术的简单查看器,具有预设字体、编码、自动调整窗口大小和可点击的超链接。(misc, linux, windows)
  12. OCRFeeder-(RepoWP)GNOME的光学字符识别套件,支持楔形、GOCR、OCRAD和Tesseract等命令行OCR引擎。(linux, gtk)
  13. 奥克洛普斯-(RepoWP)文档分析和光学字符识别(OCR)系统。(linux, mac, console)
  14. 八角莲-(RepoHomeFund)消费类3D打印机的基于Web的控制器。(server, flask, hardware)
  15. 照片拼版-(Repo)自动布局照片拼贴以填充给定的海报空间。(linux, gtk)
  16. PHOTONIX-(RepoHomeDemo)基于Web的照片管理,具有对象识别、位置感知、颜色分析等智能过滤功能。(server)
  17. 皮诺奇奥-(RepoHome)极简主义漫画阅读器,支持多种常见图像和档案格式。(linux)
  18. Quru镜像服务器-(RepoHomeDemoDocs)用于创建和传送动态图像的高性能网络服务器。(server)
  19. SK1-(RepoHomeWP)功能丰富、跨平台的插图程序。(linux, windows, mac, gtk, wx)
  20. 桑伯(Thumbor)-(RepoHomeDocs)照片缩略图服务,具有调整图像大小、翻转和智能裁剪图像的功能。(dev, server)

Games

  1. 大灾难:黑暗的未来(发射器)-(RepoHome)流行的自由/开源软件游戏的启动器CDDA,支持自动更新和mod管理。(linux, windows, mac)
  2. Fire X上的烦恼-(Repo)高度可定制的节奏游戏,支持多种模式的吉他、贝斯、鼓和声乐游戏,最多可供四名玩家使用。(linux, windows, pygame)
  3. 卢卡斯国际象棋-(RepoHome)功能强大的Windows国际象棋客户端,带有一些Linux支持。(linux, windows, qt4)
  4. 鲁特里斯(Lutris)-(RepoHomeWPFund)GNU/Linux游戏平台,使用统一界面管理游戏安装。(linux, gtk)
  5. 开放式流媒体平台-(Repo)自托管视频流和录制服务器,设计为Twitch和YouTube的替代品。(video, server)
  6. 皮尔斯国际象棋-(RepoHomeWP)高级棋类客户端,适合新盘、休闲盘、好胜盘。(linux, windows, gtk)
  7. Pyfa-(Repo)Python试衣助手,跨平台实验工具EVE Online船舶配件。(linux, windows, mac)
  8. PySolFC-(RepoHomeAndroid)高度便携的纸牌游戏集合。(linux, windows, android, kivy, tk)
  9. 术语2048-(RepoPyPI)的TUI版本2048(linux, mac, tui)
  10. 未知地平线-(RepoHome2)以经济和城市建设为重点的二维实时战略模拟。(与“帝国时代”没什么不同)(linux, windows, mac)

Productivity

  1. 自动关键点-(RepoWPPyPI)Linux和X11的桌面自动化实用程序。(linux, gtk, qt)
  2. BleachBit-(RepoHome)系统清洁器,旨在释放磁盘空间并保护隐私。(linux, windows, gtk)
  3. 边缘备份-(RepoHome)使用可选的加密和其他功能对备份系统进行重复数据消除。(linux)
  4. BUP-(RepoHome)基于git包文件格式的高效备份系统,提供快速增量保存和全局重复数据删除。(linux, mac)
  5. 埃克斯卡利伯-(Repo)Web界面从PDF中提取表格数据。(linux, windows)
  6. 一瞥-(RepoHomeDocs)跨平台TOP/HTOP替代方案,提供系统资源概览。(ops, linux, windows, mac, server)
  7. gmvault-(RepoHome)备份Gmail帐户的工具。(linux, windows, mac, qt5)
  8. 网格同步-(Repo)跨平台图形用户界面通过Tahoe-LAFS存储网格构建到同步本地目录。(storage, linux, windows, mac)
  9. GTimeLog-(RepoHomeFundDocs)基于桌面的时间跟踪器,支持记录付费/非付费工作。(organization, linux, windows, mac)
  10. Kibitzr-(RepoHomePyPIDocs)用于自动执行日常任务的自托管个人助理服务器。(server)
  11. 备份-(RepoPyPI)备份和同步应用程序设置的实用程序,支持多个存储后端(例如Dropbox、Git)和数十个应用程序。(linux, mac)
  12. 变质-(RepoHome)文件和文件夹的图形化批量重命名程序。(linux, windows, mac, wx)
  13. Nuxeo Drive-(RepoHomeDocs)Nuxeo平台的跨平台桌面同步客户端。(storage, linux, windows, mac, console, appimage, lgpl, qt5)
  14. NVDA-(RepoHome)非可视化桌面访问,这是一款功能强大的Windows屏幕阅读器。(windows, wx)
  15. 犁地-(RepoHomeFundDocs)自动将速记动作转换为击键的后台服务,可在任何应用程序中实现超过200WPM的打字速度。(linux, windows, mac, hardware, qt5)
  16. 普索诺-(RepoHomeDemoDocs)基于服务器的密码管理器,为团队构建。(security, server)
  17. 游骑兵-(RepoHome)TUI(Text User Interface)文件管理器,灵感来自VIM。(linux, tui)
  18. 雷达什-(RepoHome)面向商业智能的数据可视化和仪表板构建,由Mozilla、SoundCloud、Sentry和其他公司使用。(server, flask)
  19. ReproZip-(RepoHomeDemoPyPIDocs)命令行工具,从控制台命令自动建立可重现的实验档案,设计用于计算科学。(science, linux)
  20. 向日葵-(RepoHome)小巧且高度可定制的Linux双面板文件管理器,支持插件。(linux)
  21. 超集-(RepoDocs)数据探索、可视化和商业智能Web应用程序。(server)
  22. VisiData-(RepoHomeFundPyPIDocs)交互式多功能工具,用于浏览、分析和转换终端中的数据集。(linux, mac, tui)
  23. 沃塔-(RepoHome)在以下基础上构建的GUI备份客户端BorgBackup(linux, mac)
  24. wttr.in-(RepoHome)支持各种表示的天气预报服务,适用于终端或Web浏览器。(server, flask)

Organization

  1. 安巴尔-(RepoHomeDemoDocs)文档搜索引擎,具有自动爬行、OCR、标记和即时全文搜索功能。(server)
  2. 档案箱-(RepoHomeDocs)自托管Web存档,用于创建来自Web的内容的本地可浏览备份。从Pocket、插接板、浏览器历史记录等导入HTML、JS、PDF、视频、字幕、GIT存储库等。(internet, linux, windows, docker)
  3. 档案学-(RepoHomeDocs)数字保存系统,旨在保持对数字对象集合的基于标准的长期访问,目标客户是档案员和图书馆员。(internet, server)
  4. 宝贝巴迪-(RepoDemo)移动友好的Web应用程序,帮助照顾者跟踪睡眠、喂养、换尿布和肚子时间,以了解和预测婴儿的需求,而不需要(尽可能多的)猜测。(server)
  5. 巴塞罗-(RepoHomeghDocs)基于WEB的无代码持久化平台,就像数据库遇到电子表格一样,有一个睡觉接口。(storage, server, django)
  6. 豆数-(RepoHomeghPyPIDocs)复式记账语言,以纯文本定义财务交易记录,然后通过CLI和Web界面生成各种报告。(另请参阅,Plain Text Accounting)。(linux, windows, mac)
  7. 布库-(RepoFundDocs)独立于浏览器的书签管理器,具有CLI和Web服务器前端,集成了浏览器、基于云的书签管理器和emacs。(internet, linux, windows, mac, server)
  8. 旁路-(RepoDocs)各种中小型俱乐部/非政府组织/协会的基于网络的会员管理工具,重点放在DACH地区。(server)
  9. 口径-(RepoHomeWPFund)电子书管理器,用于查看、转换、编辑和编目所有主要格式的电子书。(linux, windows, mac, qt5)
  10. Calibre-卷筒纸-(Repo)为浏览、阅读和下载电子书提供干净界面的Web应用程序使用现有的Calibre数据库。(linux)
  11. 樱桃树-(RepoHome)类似维基的层次化个人记事本,具有丰富的文本和语法突出显示功能。(linux, windows, gtk)
  12. 协作-(RepoDocs)由设计的基于Web的协作工具Propublica用于新闻编辑室共享数据集,以及围绕分配提示和维护联系人构建的工作流程。(communication, server)
  13. 熟食土豆-(RepoHome)专注于电影的个人录像机,支持Usenet和Torrents。(linux, windows, mac)
  14. dupeGuru-(RepoHomeDocs)跨平台GUI工具,用于查找重复文件。(linux, windows, mac)
  15. DVC(数据版本控制)-(RepoHomeDocs)用于对机器学习项目中使用的数据进行版本控制的命令行工具。旨在取代Excel和其他用于跟踪和部署模型版本的工具。(scm, linux, windows, mac)
  16. 人情-(RepoDemoDocs)复式记账软件的Web界面Beancount将重点放在功能和可用性上。(linux, windows, mac)
  17. 爷爷-(RepoHome)系谱软件,既对业余爱好者来说是直观的,对于专业系谱学家来说又是功能齐全的。(linux, windows, mac, gtk)
  18. GTimeLog-(RepoHomeFundDocs)基于桌面的时间跟踪器,支持记录付费/非付费工作。(productivity, linux, windows, mac)
  19. 耳机-(RepoDocs)基于Web的数字音乐库,用于通过Usenet和Torrents自动下载音乐。(linux, windows, mac)
  20. 我讨厌钱-(RepoHomeDocs)Web应用程序,通过跟踪谁为谁购买了什么、何时和为谁购买了什么,从而简化了共享预算管理。(server)
  21. 印度公司-(RepoHomeDemoDocs)在以下位置设计的功能丰富的Web应用程序CERN用于管理活动,并支持会议组织工作流程,从内容管理到接收和审阅摘要/论文、活动注册、支付集成、房间预订等,应有尽有。(communication, server)
  22. Invenio-(RepoDocs)用于运行可信数字存储库的可定制平台。(linux)
  23. jrnl-(RepoHome)简单、加密的日志应用程序,适用于您的命令行。(linux, windows, mac, homebrew)
  24. 懒惰的图书馆员-(RepoForumDocs)基于Web的数字图书馆管理器,支持以下作者和自动元数据检索。(linux, mac)
  25. 玛雅人-(RepoHomeFundPyPIDocs)基于Web的文档管理系统,设计用于存储、自省和分类文件,具有OCR、预览、标记、签名和发送功能。同时支持工作流系统、基于角色的访问控制、睡觉接口。(server)
  26. MLflow-(RepoHomeDocs)集成了命令行应用程序和Web服务,支持围绕跟踪、打包和部署的端到端机器学习工作流。由开发人员开发Databricks(dev, linux, mac, corp)
  27. OpenLibrary-(RepoHomeWP)用于开放的、可编辑的库目录的Web应用程序,由The Internet Archive为曾经出版的每一本书建立一个网页。(linux, windows, mac, docker)
  28. 无纸化-(RepoDocs)扫描、索引和存档所有纸质文档。支持OCR、标签、搜索、加密等。(server)
  29. 文书工作-(RepoHomeFundDocs)个人文档管理器,用于组织扫描的文档和PDF,支持OCR、自动标记和搜索。(linux, windows, gtk)
  30. 松林-(RepoHome)平铺图像板系统,用于保存、标记和共享图像、视频和网站,就像一个自托管的Pinterest。(server)
  31. Pretalx-(RepoHomeFund)基于Web的会议规划工具,支持论文呼叫(CFP)、日程安排和发言人管理。(communication, server)
  32. 皮梅杜萨(PyMedusa)-(RepoHome)电视节目视频库管理器,支持自动下载。(linux, windows)
  33. 根基-(RepoHome)简单的CalDAV(日历)和CardDAV(联系人)服务器。(server)
  34. 红色笔记本-(RepoHome)桌面日记专为富文本、媒体和基于模板的条目设计,可以标记和搜索,也可以导出为纯文本、HTML、Latex或PDF。(linux, windows, mac)
  35. 书院-(RepoHomeDocs)Python包和Web应用程序,用于与学术信息交互Wikidata(science, server)
  36. 塞纳特人-(RepoHome)基于Web的、移动优先的实验室信息管理系统(LIMS)。(server)
  37. SiCKRAGE-(RepoghDocs)支持自动电视节目存档的视频库管理器。(linux, windows)
  38. 泰加-(RepoHomeDocs)为使用敏捷开发流程管理项目而构建的Web应用程序。(dev, server, django)
  39. WiKID Pad-(RepoHome)台式机维基笔记本,用于存储您的想法和想法。(linux, windows, mac, wx)
  40. 赞迪科斯-(RepoHome)轻量级但相对完整的CardDAV/CalDAV服务器,用于备份Git存储库中的更改。(server)
  41. Zim Wiki-(RepoHome)桌面维基专为做笔记、列清单和起草而设计。(linux, windows, gtk)

Communication

  1. 阿比勒SBE-(RepoHome)一个“社交业务引擎”,功能包括轻量级文档管理、讨论、维基、时间表等等。(cms, server)
  2. Askbot-(RepoHome)Q&A类似于StackOverflow的网络平台,具有标签、声誉、徽章等功能。(server, corp)
  3. 位消息-(RepoDocs)BitMessage的参考客户端,这是一种对等加密的分散通信协议。(linux, windows, mac, kivy, qt4, tui)
  4. 协作-(RepoDocs)由设计的基于Web的协作工具Propublica用于新闻编辑室共享数据集,以及围绕分配提示和维护联系人构建的工作流程。(organization, server)
  5. DAK-(Repo)用于维护Debian项目的电子邮件存档的程序集合。(linux)
  6. Django维基-(RepoDemoDocs)一个简单而成熟的基于Web的维基。(server)
  7. 文档汇编-(RepoHomeDocs)平台,用于创建移动友好的基于Web的采访、收集回复等。(server)
  8. 形式狂欢-(RepoHome)网络服务器,无需注册、JavaScript或自定义Python即可将Html表单深渊翻滚转换为电子邮件。(server, corp)
  9. 加济族-(RepoWP)用于XMPP协议的轻量级、跨平台即时消息客户端。(linux, windows, mac, gtk)
  10. GlobaLeaks-(RepoHome)Web应用程序,以实现安全和匿名的告密计划。(server)
  11. 韩流-(RepoSnapDocs)第三方即时信使,用于Google Hangouts,支持群发消息和其他专有功能。(linux, mac, docker, snap)
  12. 鹰柱-(RepoHome)允许从技术较低的发送者接收加密消息的Web应用程序。(server)
  13. 太阳神投票-(RepoHome)端到端可验证投票系统。(server)
  14. Inboxen-(RepoHomeDocs)Web应用程序,提供无限数量的唯一电子邮件收件箱,用于细分服务和维护隐私。(server)
  15. 印度公司-(RepoHomeDemoDocs)在以下位置设计的功能丰富的Web应用程序CERN用于管理活动,并支持会议组织工作流程,从内容管理到接收和审阅摘要/论文、活动注册、支付集成、房间预订等,应有尽有。(organization, server)
  16. 魔术虫洞-(RepoPyPIDocs)注重安全性和速度的文件传输工具,支持文件、文本和目录。(linux, mac, console)
  17. 邮递员-(RepoHomeWP)原始列表服务器、用于管理订阅和讨论档案的web应用和电子邮件服务器。(server)
  18. 邮件堆-(RepoHome)具有用户友好的加密和隐私功能的快速电子邮件客户端。(linux, windows, mac)
  19. 麦露-(RepoHome)功能齐全的邮件服务器,设计易于安装和维护,支持imap、imap+、smtp和深渊翻滚,以及一系列高级功能。(server)
  20. Modoboa-(RepoHome)邮件托管和管理平台,包括基于Django的web UI。提供有用的组件,如管理面板和网络邮件。与后缀或Dovecot集成。(server)
  21. MoinMoin-(RepoHomeWPDocs)Python自己的基于Web的维基软件,用于the official Python wiki还有其他许多人。(server)
  22. OfflineIMAP-(RepoHomeWP)IMAP读取器和同步器。(linux)
  23. OnionShare-(RepoHomeDocs)通过安全和匿名的文件共享Tor服务。(linux, windows, mac, qt5)
  24. 小狗-(RepoHomeWP)用于协作翻译的Web应用程序。(server)
  25. Pretalx-(RepoHomeFund)基于Web的会议规划工具,支持论文呼叫(CFP)、日程安排和发言人管理。(organization, server)
  26. pycsw-(RepoWP)全面实施OpenGIS目录服务实现规范。(server)
  27. 快速短信-(RepoHomeDocs)交互式短信短信平台。(server)
  28. SecureDrop-(RepoHomeDocs)举报人深渊翻滚系统,用于媒体组织安全地接受匿名来源的文件。最初创建者Aaron Swartz,并且当前由Freedom of the Press Foundation(server, flask)
  29. SocialHome-(RepoHomeghDocs)Web应用程序,使用户能够构建具有社交网络功能的联合个人简档。(server)
  30. 突触-(RepoHomeFund)参考服务器,用于matrix.org分布式聊天协议。每天有数万人在riot.im(server)
  31. Virtaal-(RepoHome)用于执行翻译的跨平台GUI,支持多种格式。(linux, windows, mac, gtk)
  32. Weblate-(RepoHomePyPI)基于Web的本地化工具,具有紧密的版本控制集成。(server)
  33. Zulip-(RepoHomeWPDocs)功能强大的聊天服务器和Web客户端,支持串连对话。(server)

Education

  1. 安琪-(RepoHomeDocs)功能强大的桌面应用程序,可用于闪存卡和记忆。(linux, windows, mac, qt5)
  2. 牵引式机器人-(RepoHomeWP)用于MacOSX的强大的可编程2D绘图应用程序,可从Python脚本生成图形。(graphics, dev, mac)
  3. 科利布里-(RepoHomeDemoPyPIDocs)可自我托管的学习网络应用程序,目标是在资源匮乏的社区(如农村学校、难民营、孤儿院、非正规学校系统和监狱系统)提供高质量的教育技术。(server)
  4. 锰合成材料-(RepoHome)间隔重复的抽认卡程序,可有效记忆。(linux, windows, mac, qt5)
  5. NBGrader-(RepoDocs)基于Jupyter的应用程序,使教育工作者能够以笔记本形式创建、分配和评分作业。(server)
  6. 开放式edX平台-(RepoHomeWP)面向在线教育提供商的平台,支持edX(server)
  7. 关联-(RepoDocs)基于Web的课件,支持课程规划和版本控制、日程安排、测试和评分。(server)
  8. 导师-(RepoDocs)基于Docker的Open edX分发,用于生产和本地开发,目标是简化部署、定制、升级和扩展。(server)

Science

  1. 阿努加-(Repo)浅水方程的高级模拟,用于模拟海啸、溃坝和洪水。(linux, windows)
  2. 工匠-(RepoHomeDocs)咖啡烘焙机的桌面视觉范围,帮助咖啡烘焙机记录、分析和控制烘焙配置文件。(linux, windows, mac)
  3. 上升-(RepoHomeWP自1978年底以来,卡内基梅隆大学开发了数学化学过程建模系统。(linux, windows, mac, gtk)
  4. CellProfiler-(RepoHomeManualDocs生物图像集的交互式数据探索、分析和分类。(linux, windows, mac)
  5. 细胞基因-(RepoHome)用于单细胞转录组数据的基于网络的交互式浏览器。(linux, windows, mac, fnd)
  6. CKAN-(RepoHome)数据管理系统(DMS),使发布、共享和使用数据变得容易。由CKAN提供支持的数据集线器包括datahub.iocatalog.data.gov,以及europeandataportal.eu,在许多其他网站中。(server, flask)
  7. CoCalc-(RepoHomeWP)云中的协作计算,支持科学Python堆栈、SageMath、R、LaTeX、Markdown等。还具有聊天、课程管理和其他支持功能。(server)
  8. Dissem.in-(RepoHomeDocs)网络平台,帮助研究人员将他们的论文上传到开放获取的存储库。(server, django)
  9. 银河系-(RepoHomeDocs)基于网络的可重复和透明的计算研究平台,重点是生物信息学。(server)
  10. 因维萨利乌斯-(RepoHomeWP)生成用于医疗目的的人体结构的虚拟重建,包括CT和MRI扫描。(linux, windows, mac, gtk)
  11. 马尼姆-(RepoDocs)用于解释性数学视频的动画引擎,主要设计用于works by 3blue1brown(linux)
  12. 马亚维-(RepoHome)通用、跨平台的2-D和3-D科学数据可视化工具。(linux, windows, mac, qt4)
  13. 马赛克-(RepoHomeDocs)基于桌面的单分子分析工具箱,可自动解码多态纳米孔数据。(linux, windows, mac, gov)
  14. 奥狄米斯-(RepoHome)用于DELMIC显微镜的桌面成像工作流程软件,支持自动对焦、坐标历史记录以及OME-TIFF和HDF5导出。(linux)
  15. OPEM-(RepoDocs)一种用于评估性能的建模工具proton exchange membrane (PEM) fuel cells(linux, windows, mac)
  16. 桔黄色的-(RepoHomeWP)基于组件的数据挖掘软件,用于图形交互数据分析和可视化。(linux, windows, mac, qt4, qt5)
  17. 书目编写员-(RepoHome)书目数据库管理器,具有用户友好的桌面UI。(linux, gtk)
  18. ReproZip-(RepoHomeDemoPyPIDocs)命令行工具,从控制台命令自动建立可重现的实验档案,设计用于计算科学。(productivity, linux)
  19. 圣人数学-(RepoHomeWP)跨平台的计算机代数系统,其特点包括代数、组合数学、图论、数值分析、数论、微积分和统计学等多个方面。(linux, windows, mac)
  20. 书院-(RepoHomeDocs)Python包和Web应用程序,用于与学术信息交互Wikidata(organization, server)
  21. SOFA统计数据-(RepoHome)以边学边用的方式进行用户友好的统计和分析。(linux, windows, mac, wx)
  22. Spack-(RepoHomeDocs)用于超级计算机、Mac和Linux的独立于语言的包管理器,专为科学计算而设计。(pkg_mgr, linux, mac)
  23. 塔盖特-(RepoHomeghPyPIDocs)基于Web的定性研究工具,支持导入、标记、突出显示和导出多种文档格式。(server)
  24. 维兹-(RepoHome)2D和3D科学绘图,旨在生成可供发布的PDF或SVG图形。(linux, windows, mac, qt)

CMS

  1. 阿比勒SBE-(RepoHome)一个“社交业务引擎”,功能包括轻量级文档管理、讨论、维基、时间表等等。(communication, server)
  2. Django-CMS-(RepoHome)基于Django框架的企业内容管理系统,具有版本控制、多站点支持等功能。(server, django)
  3. 埃拉-(RepoDocs)基于Django的内容管理系统,重点关注高流量的新闻网站和互联网杂志。(server, django)
  4. 夹层-(RepoHome)基于Django框架构建的一致、灵活的内容管理平台。(server, django)
  5. PLONE-(RepoHomeWP)基于Zope构建的可扩展企业内容管理系统。(server)
  6. 梅花-(RepoWP)基于WEB的视频分享内容管理系统Plone(video, server, plone)
  7. Pretix-(RepoHomeBlogPyPIDocs)基于Web的票务软件,支持可定制的店面、直接支付、票房和报告。(server, corp)
  8. PyCon-(RepoHomeDocs)内容管理和会议组织web应用,基于Django和Symposion(server, django)
  9. 销售商-(RepoHome)使用Django、GraphQL和ReactJS构建的模块化、高性能电子商务店面。(server, django)
  10. 舒普(Shuup)-(RepoHomeDocs)Storefront Web应用程序,支持单一和多市场模式。(server)
  11. 摇尾辫-(RepoHome)关注灵活性和用户体验的Django内容管理系统。(server, django)

ERP

  1. ERP5-(RepoHomeWP)基于Web的ERP、CRM、DMS和大数据系统,具有数百个内置模块,专为企业可扩展性而设计。(server)
  2. ERPNext-(RepoHomeWP)基于Web的ERP系统,包括会计、库存、CRM、销售、采购、项目管理和人力资源。在此基础上构建Frappe和MariaDB。(server)
  3. 弗雷普尔-(RepoHomeDocs)基于Web的供应链计划,用于生产计划和调度。(linux, windows, server)
  4. 奥杜-(RepoHomeWP)基于Web的ERP和CRM,具有许多内置模块,外加数千个应用程序,可满足任何业务需求。(server)
  5. 特雷顿-(RepoHomeWPDocs)模块化的基于Web的ERP,专为各种规模的公司设计。(server, fdn)

Static Site

  1. 仙人掌-(RepoPyPI)使用姜戈模板的静电网站生成器。(linux, windows, mac)
  2. 硅质岩-(RepoPyPI)静电站点生成器,内置对listicle的支持,由这位谦逊的作者创建,用于供电calver.org0ver.org,以及sedimental.org,作者的博客。主要是作为复活节彩蛋出现在这里:)(linux, windows, mac)
  3. 增长-(RepoHomePyPI)静电站点生成器针对构建交互式、本地化的微型站点进行了优化,重点放在工作流和可维护性上。(linux, windows, mac)
  4. 海德-(RepoHomePyPI)静电站点生成器,它最初是Python的对应物Jekyll(linux, windows, mac)
  5. 莱克托-(RepoHomePyPI)静电站点生成器,内置管理控制台和最小的桌面应用程序。(linux, windows, mac)
  6. 尼古拉-(RepoHomePyPI)命令行静电站点生成器,支持增量重建并支持Markdown、睡觉、Jupyter笔记本和HTML语言。(linux, windows, mac)
  7. 鹈鹕-(RepoHomePyPI)支持Markdown和静电语法的命令行睡觉站点生成器。(linux, windows, mac)
  8. Prosopopee-(RepoDemoPyPIDocs)静电网站生成器,专为摄影师和其他用图片讲故事的人设计。(linux, windows, mac)
  9. PyVideo-(RepoHome)静电媒体索引是为python社区定制的,以及我们的会议和会议产生的所有内容。(video, linux, server)

Dev

与软件开发和相邻技术领域相关的项目

SCM

  1. 阿卢拉-(RepoHomeWP)软件forge,支持GIT、HG和SVN。(server)
  2. DVC(数据版本控制)-(RepoHomeDocs)用于对机器学习项目中使用的数据进行版本控制的命令行工具。旨在取代Excel和其他用于跟踪和部署模型版本的工具。(organization, linux, windows, mac)
  3. 吉特可乐-(RepoHome)功能强大的跨平台GUI包装器,用于git(linux, windows, mac, qt4, qt5)
  4. 无支架-(RepoHomePyPIDocs)建立在Git之上的简单版本控制系统。(linux, windows, mac)
  5. GNU Bazaar-(RepoHomeWPDocs)分布式和客户端-服务器修订控制系统。(linux, windows, mac)
  6. 卡莉西亚-(RepoWP)软件forge对于Mercurial和具有内置推拉服务器、全文搜索和代码审查的Git。2014年从RhodeCode派生出来。(server)
  7. 克劳斯-(RepoDemoPyPIDocs)PIP可安装的基于web的查看器,用于“只需工作”的git存储库。(server)
  8. 发射台-(RepoHomeWPDocs)由Canonical设计和运行的软件Forge,支持Git和Bazaar(server)
  9. -(RepoHomeWP)跨平台分布式修订控制系统,专为高性能和高级分支/合并能力而设计。(linux, windows, mac)
  10. 页码-(RepoHome)软件forge专注于GIT,由Fedora工程团队开发。(server)
  11. 拼凑而成-(RepoHomeDocs)基于Web的补丁程序跟踪系统,旨在促进对开放源码项目的代码贡献。设计并用于Linux内核子系统开发。(server)
  12. 兔VCS-(RepoHomeDocs)工具,在各种客户端(包括Nautilus、Thunar、Nemo、Caja和命令行)中提供对Subversion或Git的直接图形访问。(linux)
  13. RhodeCode-(RepoHomeWP)用于防火墙后源代码管理的自托管平台,提供对Git、Mercurial和Subversion的集中控制。(server, corp)
  14. 综合报道-(RepoWP)高度可定制的问题跟踪系统,具有命令行、Web和电子邮件界面,供官方Python错误跟踪器使用,网址为bugs.python.org(server)
  15. 乌龟汞-(RepoHomeDocsWindows shell扩展和Mercurial分布式修订控制系统的一系列应用。还包括GNOME和CLI支持。(linux, windows, qt4, qt5)
  16. 跟踪-(RepoHomeWPDocs)增强了软件开发项目的基于网络的维基和问题跟踪系统。(server)
  17. ViewVC-(RepoHome)CVS和Subversion版本控制库的浏览器界面。(server)

Code Review

  1. 分光镜-(RepoHomeDemoPyPI)基于Web的文件、归档和目录深度比较,包括支持不同的tarball、ISO图像和PDF。(server)
  2. 融合-(RepoHome)面向开发者的Visual diff and Merge工具,提供文件和目录的双向和三向比较,支持Git、Mercurial、Bazaar、Subversion等多种版本控制系统。(linux, windows, mac, gtk)
  3. 覆核委员会-(RepoHome)可扩展的代码审查工具,适用于各种规模的项目和公司。(server)
  4. Rietveld-(RepoHomeWP)基于Django的Subversion协作代码审查工具,由Guido van Rossum在其上奔跑Google AppEngine的基础Gerrit(server)

Storage

  1. B2-(RepoPyPI)命令行工具,可轻松访问Backblaze的所有功能B2 Cloud Storage(linux, windows, mac, corp)
  2. 酒吧招待-(Repo)PostgreSQL的远程备份和灾难恢复。(linux)
  3. 巴塞罗-(RepoHomeghDocs)基于WEB的无代码持久化平台,就像数据库遇到电子表格一样,有一个睡觉接口。(organization, server, django)
  4. 数据板-(RepoPyPIDocs)一个用于浏览和发布数据的工具,以SQLite为后盾。(server)
  5. EdgeDB-(RepoHomeDocs)建立在PostgreSQL之上的高性能对象关系数据库,具有严格、强类型、内置迁移和GraphQL支持。(server)
  6. FreeNAS-(RepoHomeDocs)设计成几乎可以安装在任何硬件平台上的操作系统,用于共享ZFS基于网络的存储,使用SMB、NFS、AFP、FTP等。(server)
  7. 网格同步-(Repo)跨平台图形用户界面通过Tahoe-LAFS存储网格构建到同步本地目录。(productivity, linux, windows, mac)
  8. 金托-(RepoHomeDocs)具有共享和同步功能的通用JSON文档存储,支持内存中和PostgreSQL后端。(server)
  9. mycli-(RepoHomePyPI)执行自动完成和语法突出显示的Interactive MySQL客户端。(linux, mac)
  10. Nuxeo Drive-(RepoHomeDocs)Nuxeo平台的跨平台桌面同步客户端。(productivity, linux, windows, mac, console, appimage, lgpl, qt5)
  11. pgcli-(RepoHomePyPI)执行自动完成和语法突出显示的Interactive PostgreSQL客户端。(linux, mac)
  12. S3QL-(RepoDocs)符合标准、功能齐全的UNIX文件系统,用于基于云的存储服务(S3、Google Storage、OpenStack),支持压缩、加密、重复数据删除、快照等。(linux)
  13. 海边文件-(RepoWP)跨平台文件托管和同步系统。(server)
  14. sqlmap-(RepoHomePyPIDocs)自动SQL注入和数据库接管。(security, console)
  15. TahoeLAFS-(RepoHomeWP)分散的云存储系统,用于健壮的分布式数据存储。(linux, windows, mac)
  16. WAL-E-(Repo)连续存档PostgreSQL Wal文件和基本备份。(linux)
  17. ZEO-(RepoPyPIDocs)服务器和客户端提供ZODB基于网络的存储。(linux, server)
  18. ZFSp-(Repo)一个逆向工程ZFS实现,用Python编写,不需要读取原始的C。(linux)

Ops

  1. 气流-(RepoDocs)以编程方式编写、调度和监控工作流的平台。(linux, server, corp, flask)
  2. 阿金提-(RepoHomePyPIDocs)基于Web的服务器管理面板,可实现快速、可扩展的远程访问,具有Web终端、文本编辑器、文件管理器等功能。(server)
  3. 可笑的-(RepoHomeDocs)无代理、基于攻略的自动化。(linux, mac, corp)
  4. AWS-CLI-(RepoPyPIDocs)亚马逊Web服务的官方命令行界面。(console, py26)
  5. 烧杯-(RepoHomeDocs)硬件集成测试系统,RedHat用来测试RHEL和Fedora的兼容性。(server, flask)
  6. 鞋匠-(RepoHomeWP)Linux安装服务器,允许快速设置网络安装环境。(linux, server)
  7. DCOS-(RepoHomeWPDocs)数据中心硬件和软件资源管理平台,构建于Apache Mesos(server, corp)
  8. 故障2ban-(RepoHomeWP)守护程序禁止在Linux服务器上导致多个身份验证错误的主机。(linux, server)
  9. 加内蒂-(Repo)基于现有虚拟化技术构建的虚拟机群集管理工具,例如XenKVM(linux, server, haskell)
  10. 一瞥-(RepoHomeDocs)跨平台TOP/HTOP替代方案,提供系统资源概览。(productivity, linux, windows, mac, server)
  11. 独角兽-(RepoHomePyPI)可插拔的预分叉WSGI服务器,作为的对等物启动Unicorn(server)
  12. 健康检查-(RepoHomeDocs)基于Web的调度作业监视器(例如,cron)。(server, corp)
  13. 虹膜-(RepoHome)灵活的事件自动寻呼系统,由LinkedIn开发并在LinkedIn使用。(server, corp)
  14. 纳格斯塔蒙-(RepoHomeDocs)桌面状态监视器,支持Nagios、Icinga、Opsview等。(linux, windows, mac)
  15. N殖民地-(RepoHome)进程管理器和监视器。(linux, mac, server)
  16. Netbox-(RepoDocs)IP地址管理(IPAM)和数据中心基础设施管理(DCIM)工具,构思于数字海洋。(server, django)
  17. nsupdate.info-(RepoPyPIDocs)功能强大的动态DNS服务,使用动态DNS更新协议(RFC 2136)更新BIND和其他主要名称服务器。(internet, server)
  18. OnCall-(RepoHome)日历工具,设计用于随叫随到的管理和日程安排,由LinkedIn开发并在LinkedIn使用。(server, corp)
  19. OpenStack-(RepoHomeDocs)云操作系统,控制整个数据中心的大型计算、存储和网络资源池,可通过基于Web的控制面板进行管理。(server, corp)
  20. 纸浆-(RepoHomeDocs)用于管理软件包存储库并使其可供大量消费者使用的平台。由红帽公司开发和使用。(server)
  21. 拉尔夫-(RepoHomeDocs)适用于数据中心和后台的简单而强大的资产管理、DCIM和CMDB系统。(server, django)
  22. RDPY-(Repo)基于Twisted的Microsoft远程桌面协议的实现,包括客户端使用的应用程序、MITM代理和蜜罐服务器。(security, linux, windows, server)
  23. 盐堆-(RepoHome)自动化,可大规模管理和配置任何基础设施或应用程序。(server, corp)
  24. 辛肯-(RepoHome)Shinken是一个与Nagios兼容的现代监控框架,专为适应大型环境而设计。(server)
  25. 太空警报器-(RepoDocs)AWS令牌的蜜罐管理和警报系统,采用完全无服务器架构。(security, server)
  26. Spinnaker-(RepoHomeWPDocs)为Netflix在云环境中部署和管理应用程序而开发的持续交付平台。(server, corp)
  27. 堆栈风暴-(RepoHome)规则和事件驱动型运营自动化,用于自动补救、安全响应、故障排除、部署等。(server, corp)
  28. 主管-(RepoHome)进程管理器和监视器。(linux, mac, server)

Security

  1. BYOB(自建僵尸网络)-(Repo)客户端-服务器框架(RAT和C2服务器),供安全研究人员构建和操作基本僵尸网络。(linux, windows, mac)
  2. 开普敦-(RepoDemo)设计用于自动执行恶意软件分析的Web应用程序CAPEv2(server)
  3. CAPEv2-(RepoDemo)设计用于自动执行恶意软件分析的Web应用程序,目标是从上传的工件中提取有效负载和配置。(server)
  4. 宝贝儿-(RepoHome)中型交互SSH和Telnet蜜罐,旨在记录暴力攻击和攻击者执行的外壳交互。(server, corp)
  5. GR快速响应-(RepoDocs)服务器-代理系统专注于远程实时取证,用于快速、基于浏览器的分类和分析针对机器群的攻击,并提供对Linux、Windows和OS X的代理支持。(server, corp)
  6. 主机-(Repo)合并信誉良好的命令行应用程序hosts files具有重复数据删除功能,目的是通过DNS黑洞阻止不良网站。(internet, linux, windows, mac)
  7. 哈勃-(RepoDocs)模块化安全合规性客户端,提供基于配置文件的按需审核、警报和报告。最初是为Adobe设计的。(linux, windows, corp)
  8. 感染猴-(RepoHomeDocs)基于Web的工具,用于测试数据中心对外围入侵和内部服务器感染的恢复能力。(server)
  9. 钓鱼王-(RepoDocs)基于服务器phishing活动工具包,用于模拟真实世界的网络钓鱼攻击,使用GTK支持的客户端应用程序。(linux, windows, server)
  10. LinOTP-(RepoHomeWPDocs)服务器支持双因素身份验证,一次性密码来自多个来源,从Yubikey到SMS。(server)
  11. 马特里-(Repo)具有基于Web监控的恶意流量检测系统。(linux, server)
  12. Mitmproxy-(RepoHome)支持交互式TLS的拦截HTTP代理,适用于渗透测试人员和软件开发人员。(linux, windows, mac)
  13. MozDef-(RepoDocs)安全事件自动化,为防御者提供指标和协作工具。(server)
  14. OpenSnitch-(RepoFund)的GNU/Linux端口Little Snitch应用程序防火墙。(linux, qt5)
  15. 热情-(RepoHomeDocs)密码管理服务器,提供存储服务和组访问控制列表功能。(server)
  16. Private acyIDEA-(RepoHomeWPDocs)在本地运行的多因素认证服务器,支持多种令牌类型,允许通过睡觉API、RADIUS、PAM、Windows凭据提供程序、SAML、OpenID Connect进行认证。(server)
  17. 普索诺-(RepoHomeDemoDocs)基于服务器的密码管理器,为团队构建。(productivity, server)
  18. 小狗-(RepoDocs)远程管理工具和攻击后框架,支持Windows、Linux、Mac OS X和Android目标。(linux, docker, server)
  19. PyEW-(RepoDocs)恶意软件分析工具,支持十六进制查看、反汇编、PE和ELF格式、插件等。(console)
  20. RDPY-(Repo)基于Twisted的Microsoft远程桌面协议的实现,包括客户端使用的应用程序、MITM代理和蜜罐服务器。(ops, linux, windows, server)
  21. 侦察-(RepoHomeDocsRecon-ng是一个功能齐全的侦察框架,提供了一个强大的环境来快速、彻底地进行开源的基于Web的侦察。(linux)
  22. Searx-(RepoDocs)自托管元搜索引擎,聚合来自70多个服务的结果,同时避免跟踪和分析。(internet, server, flask)
  23. 太空警报器-(RepoDocs)AWS令牌的蜜罐管理和警报系统,采用完全无服务器架构。(ops, server)
  24. 蜘蛛脚-(RepoHomeDocs)侦察工具,可自动查询100多个公共数据源,以收集有关IP地址、域名、电子邮件地址、名称等的情报。(linux, windows, mac, docker, server)
  25. sqlmap-(RepoHomePyPIDocs)自动SQL注入和数据库接管。(storage, console)
  26. 梭子-(RepoDocs)透明的网络代理服务器,使用SSH实现类似VPN的结果,而不需要root访问。(linux, mac)
  27. 暴徒-(RepoFundPyPIDocs)低交互蜜网客户端,被设计成模仿网络浏览器的行为,以便检测和仿真恶意内容。(linux, mac)
  28. 通用无线电黑客(URH)-(Repo)无线协议调查员,重点分析专有物联网通信。(linux, windows, mac)
  29. XSStrike-(Repo)Cross Site Scripting(XSS)检测套件配备了多个手写解析器、一个有效负载生成器、一个模糊引擎和一个注重性能的爬行器。(console)

Docs

  1. 海鞘-(Repo)用于编写笔记、文档、文章、书籍、幻灯片、手册页和博客的文本文档格式。(console)
  2. doc2dash-(RepoHomePyPI)基于可扩展的CLIDocumentation Set用于与一起使用的生成器Dash.appothercompatibleAPI browsers(linux, mac)
  3. 加弗尔-(RepoDocs)简单UML专为初学者设计的建模工具。(graphics, linux, windows, mac, flatpak, gtk)
  4. 久马-(RepoHomeDocs)支持Mozilla开发者网络(MDN)的平台(server, django)
  5. mkdocs-(RepoHomePyPI)简单、可定制的项目文档,内置开发服务器。(console)
  6. readthedocs.org-(RepoHomeDocs)用于构建和托管文档的持续集成平台。(server, django)
  7. 狮身人面像-(RepoHomePyPI)文档工具,适用于从代码文档到书籍的相互关联的作者团体。使用方the official Python docs,以及许多其他项目(not all of them Python)。(console)

Editor

  1. 阿尔戈干扰机-(RepoDemo)一个实验性的概念验证IDE,用于帮助在竞赛环境中编写算法。(linux, windows, mac, tk)
  2. 黑色-(RepoPyPIDocs)毫不妥协的Python代码自动格式化程序。(console)
  3. Eric IDE-(RepoHome)Python编辑器和IDE,基于Qt,集成了Scretilla编辑器控件。(linux, windows, mac, qt5)
  4. Gedit-(RepoWP)默认的GNOME文本编辑器除了使用C语言之外,还广泛使用了Python。(linux, c, gtk)
  5. 木星笔记本-(RepoHomeWP)基于Web的、可扩展的笔记本环境,用于交互计算。(linux, windows, mac)
  6. 科莫多编辑-(RepoHomeWP)多语言代码编辑器,基于Mozilla平台,用JS、Python、C++编写。(linux, windows, mac, cpp, js)
  7. LEO编辑器-(RepoHomeWP)Personal Information Manager(PIM)、IDE和Outliner,采用整体的编程和编写方法。(linux, windows, mac, qt5)
  8. -(RepoHome)为初学者Python程序员设计的一个小而简单的编辑器。(linux, windows, mac, qt5)
  9. 忍者IDE-(RepoHomeWP)跨平台的Python IDE,具有项目管理、linting、扩展等功能。(linux, windows, mac, qt5)
  10. 普鲁玛-(Repo)小巧轻便的UTF-8文本编辑器the MATE environment基于盖迪特。(linux, c, gtk)
  11. 重排文本-(RepoPyPIDocs)简单但功能强大的Markdown和reStrucredText标记语言编辑器。(linux)
  12. Spyder IDE-(RepoHomeWP)由科学家、工程师和数据分析师使用Python设计并为其设计的科学编辑和执行环境。(linux, windows, mac, qt5)
  13. 桑尼-(RepoHomeWP)面向初学者的跨平台Python IDE,专为学习编程而设计。(linux, windows, mac, tk)

Package Managers

  1. 柯南-(RepoHomeDocs)用于二进制包管理的分散式包管理器,面向C/C++开发人员。(linux, windows, mac)
  2. 孔达-(RepoHomeWP)与操作系统无关的系统级二进制包管理器和生态系统,重点放在Python和高性能科学计算上。(linux, windows, mac, corp)
  3. DNF-(RepoWPDocs)Dandified Yum(DNF)是yum而且在百胜餐饮工作过的任何地方都有效。(linux, corp)
  4. 管道-(RepoHomeWPPyPI)Python的首选包管理器,具有广泛的功能和平台支持。(linux, windows, mac)
  5. PIP-工具-(Repo)一组命令行工具,可以帮助您保持基于pip的包的新鲜性,即使您已经固定了它们。(linux, windows, mac)
  6. 管道-(RepoDocs)周围有包装纸pipvirtualenv,以及pip-tools以获得更全面的包管理工作流。(linux, windows, mac)
  7. 诗歌-(RepoHomeDocs)独立的Python依赖项管理和打包方法。(linux, windows, mac)
  8. 搬运-(RepoWP)平台无关的包管理系统,为Gentoo Linux创建并由Gentoo Linux使用,也由Chrome OS、Sabayon和Funto Linux使用。灵感来自FreeBSD端口。(linux)
  9. Solaris IPS-(Repo)以网络仓库为后盾的软件交付系统,具有区域执行安全、使用ZFS提高效率和回滚、防止引入无效包、高效使用带宽等特点。(linux, corp)
  10. Spack-(RepoHomeDocs)用于超级计算机、Mac和Linux的独立于语言的包管理器,专为科学计算而设计。(science, linux, mac)
  11. 百胜餐饮集团-(RepoHomeWP)基于RPM的系统(Fedora、RHEL等)的自动更新程序和软件包安装/删除程序。(linux, corp)

Package Repositories

  1. 班德斯卡奇-(Repo)PyPI镜像客户端符合PEP 381(server, corp)
  2. Devpi-(RepoDocs)PyPI临时服务器,以及打包、测试和发布工具,配有Web和搜索界面。就像当地的PyPI一样。(server)
  3. 发行版跟踪器-(RepoDemoDocs)Web应用程序,旨在通过电子邮件更新和全面的Web界面跟踪基于Debian的发行版的发展。为Debian Package Tracker(server)
  4. 甜牙网-(RepoHome)用于扩展的Web商店GNOME桌面环境,支持直接从浏览器添加和更新扩展。(server)
  5. 仓库-(RepoFundDocs)支持以下功能的服务器软件PyPI,大多数Python库都是从那里下载的。(server, fnd)

Build

  1. Bitbake(烘焙)-(RepoWPDocs)通用任务执行引擎,允许shell和Python任务高效并行运行,同时在复杂的任务间依赖关系约束内工作。(linux)
  2. 建筑机器人-(RepoWPDocs)针对持续集成和软件打包的需要量身定做的作业调度系统。(server)
  3. 扩建工程-(RepoWPDocs)可扩展的部署自动化工具,设计用于以应用程序为中心的组装和部署,以及可重复的Python软件构建。(linux, windows, mac)
  4. 做一件事-(RepoHomeFundDocs)命令行任务管理和自动化工具,指令用Python编写。(linux, windows, mac)
  5. 吉普-(RepoHomeWP)也称为“生成您的项目”,这是一个生成其他构建系统的构建系统。(linux, windows, mac)
  6. JHBuild-(RepoHomeghDocs)旨在简化软件包集合构建的工具,最初编写该工具是为了从源代码构建GNOME桌面。(linux)
  7. 介子-(RepoHome)构建专为速度和用户友好性而设计的系统。(linux, windows, mac)
  8. 短裤-(RepoHome)构建专为单元库设计的系统。(linux, mac, corp)
  9. PlatformIO核心-(RepoHomeFundPyPIDocs)物联网开发的多平台CLI构建系统和库管理器。(linux, windows, mac)
  10. 重做-(RepoPyPIDocs)递归的通用构建系统,取代make采用原创设计,由DJB(linux, windows, mac, console)
  11. SCons-(RepoHomeWP)特定于域的语言和构建工具,旨在取代make、autoconf和ccache。(linux, windows, mac)
  12. Snapcraft-(RepoHomeDocs)由Canonical开发的使用容器化打包、分发和更新Linux和IoT应用程序的命令行工具。(linux)
  13. 晶圆片-(RepoHomeWPDocs)跨平台构建系统,旨在改进SCON。(linux)

Shell

  1. 人体工程学-(RepoDocs)跨平台shell语言基于S-expressions与传统的贝壳特征相结合。(linux, windows, mac)
  2. -(RepoHome)一个新的bash-以及dash向后兼容的shell,具有自己改进的语言。(linux)
  3. Xonsh-(RepoHome)跨平台shell语言和命令提示符。该语言是带有附加shell原语的Python3.4+的超集。(linux, windows, mac)

Other Dev projects

  1. 海鞘线虫-(RepoHome)终端会话记录器和回放器。(linux, mac)
  2. 自动跳转-(Repo)Acd使用许多启发式方法来加速控制台文件系统导航。(console)
  3. 科拉-(RepoHomePyPI)统一的命令行界面,用于打印和修复代码,而与编程语言无关。(console)
  4. 炊事机-(RepoPyPIDocs)用于从可共享模板创建新项目的实用程序。(console)
  5. Cython-(RepoHomePyPIDocs)语言和编译器,专为高性能Python和C的互操作性而设计。(linux, windows, mac)
  6. 码头工人作文-(RepoDocs)Docker Compose是一个定义和运行多容器Docker应用程序的工具。(linux, windows, mac, corp)
  7. 现场直播-(RepoPyPIDocs)终端中用于现场演示的工具。(linux, mac)
  8. 牵引式机器人-(RepoHomeWP)用于MacOSX的强大的可编程2D绘图应用程序,可从Python脚本生成图形。(graphics, education, mac)
  9. gdbgui-(RepoHomePyPI)基于浏览器的前端gdb(linux, windows, mac)
  10. GNS3 GUI-(RepoHomePyPIDocs)图形化网络模拟器,用于模拟、配置、测试虚拟和真实网络并排除故障。(由服务器组件支持here)(linux, windows, mac)
  11. HOWDOI-(RepoPyPI)在命令行上即时编码来自StackOverflow的答案。(console)
  12. HTTPIE-(RepoHomePyPI)具有JSON支持、语法突出显示、类似wget的下载、扩展等功能的命令行HTTP客户端。(internet, linux, windows, mac)
  13. IPython-(RepoPyPIDocs)一组对Python的增强,包装它以实现更丰富的交互性。(console)
  14. 本地堆栈-(RepoHomePyPI)许多AWS服务的可自托管版本,包括S3、Route53、Lambda、RedShift等,旨在测试以云为中心的代码。(server)
  15. 蝗虫-(RepoHomeDocs)可扩展的网站用户负载测试工具,具有交互式Web界面。(server)
  16. MLflow-(RepoHomeDocs)集成了命令行应用程序和Web服务,支持围绕跟踪、打包和部署的端到端机器学习工作流。由开发人员开发Databricks(organization, linux, mac, corp)
  17. 路径拾取器-(RepoHome)Shell实用程序,用于从其他命令的输出中交互选择路径。(linux, mac)
  18. 桃子支付-(Repo)具有统一语法的高度可移植的汇编器,具有广泛的用户列表,包括许多用于围棋的密码库。(linux, windows)
  19. 针脚-(Repo)专注于逆向工程视频游戏的GDB调试前端。(linux, qt5)
  20. 基座-(RepoHomeDocs)的核心功能和Web前端FreedomBox,一个易于管理、面向隐私的家庭服务器。(linux, server)
  21. 多发性轴突-(RepoHomeDocs)基于Web的平台,用于可重现和可扩展的机器学习实验管理和指标跟踪,基于Kubernetes,支持TensorFlow、PyTorch、Kera等。(server)
  22. PPCI-(RepoDemoghPyPIDocs)Pure Python编译器Infrastructure是完全用Python编写的编译器,包含各种编程语言(C、c3、WebAssembly等)的前端以及各种CPU(6500、ARM、AVR、x86_64、openrisc等)的机器代码生成后端。(linux, windows, mac)
  23. 红帽python-(RepoDocs)Fedora、Red Hat Enterprise Linux和其他Linux发行版使用的安装程序。(linux, gtk)
  24. 机器人框架-(RepoHomePyPI)用于验收测试、验收测试驱动开发(ATDD)和机器人流程自动化(RPA)的通用、跨平台和独立于语言的自动化框架。在Python和Java中可扩展。(console)
  25. ScratchABit-(Repo)使用与IDAPython兼容的插件API轻松实现可重定向和可破解的交互式反汇编程序。(linux, tui)
  26. 脚本服务器-(RepoDemoDocs)将脚本转换为交互式的、经过验证的、可审核的Web UI,而无需修改脚本。(server)
  27. 哨兵-(RepoHome)用于跨平台应用程序监控的Web服务和前端,重点是错误报告。(server, corp, django)
  28. 索科罗-(RepoDocs)用于从Mozilla产品收集崩溃统计数据的Web服务,包括Firefox、Thunderbird和others(server)
  29. 泰加-(RepoHomeDocs)为使用敏捷开发流程管理项目而构建的Web应用程序。(organization, server, django)
  30. 桑伯(Thumbor)-(RepoHomeDocs)照片缩略图服务,具有调整图像大小、翻转和智能裁剪图像的功能。(graphics, server)
  31. 无处不在-(RepoWP)Ubuntu及其衍生产品的默认安装程序,设计为从Live CD或USB运行。(linux, gtk, qt)
  32. 伏特龙-(Repo)可扩展调试器包装器,旨在改善各种调试器的用户体验,例如LLDBGDB,以及WinDbg(linux, windows, mac)
  33. 云主机-(RepoHomeDocs)基于Debian Linux的服务器操作系统,旨在使尽可能多的人能够访问自托管,并支持多种类型的硬件。(linux, server)

Misc

  1. 法庭监听器-(RepoHomeWP)Web应用程序,提供基于图形的搜索界面和API,包含90万分钟的口头辩论记录、8000多名评委和300多万条意见。也是权力RECAP search(server)
  2. 瓜克-(RepoHomePyPI)GNOME的下拉终端,让人联想到第一人称游戏命令控制台。(linux, gtk)
  3. 家庭助理-(RepoHomeDemoDocs)将本地控制和隐私放在首位的家庭自动化平台。(linux)
  4. Jarvis在Messenger上-(RepoHome)具有多种功能的Facebook Messenger机器人。(server)
  5. NFO查看器-(RepoHome)一个用于NFO文件和其中的ASCII艺术的简单查看器,具有预设字体、编码、自动调整窗口大小和可点击的超链接。(graphics, linux, windows)
  6. 尼古丁+-(Repo)图形桌面客户端,用于Soulseek点对点系统。(linux, windows, gtk)
  7. 光轮-(RepoHome)面向科学云计算的基础设施即服务平台。(linux)
  8. OpenLP-(RepoHome)面向教堂使用的演示软件。(linux, windows, mac, qt5)
  9. 数量-(RepoHome)小的、灵活的、可编写脚本的平铺窗口管理器。(linux)
  10. UMAP-(RepoDocs)Web应用程序,允许用户使用OpenStreetMap图层创建地图并将其嵌入到其他站点。(server)
  11. 瓦姆木-(RepoHome)GUI电话管理器,支持读/写通讯录、待办事项、日历、短信等,主要为诺基亚和AT兼容手机设计。(linux, windows)
  12. 壁炉-(RepoHomeWP)用于在Linux上管理有线和无线连接的图形实用程序。(linux, gtk)
  13. Xpra-(RepoHome)跨平台远程显示服务器和客户端,用于转发应用程序和桌面屏幕。(linux, windows)

结论

如果您有项目要添加,please let us know好了!

Tqdm-一个用于Python和CLI的快速、可扩展的进度条

TQDM

tqdm派生自阿拉伯语单词塔卡杜姆(تقدّم)可以是“进步”的意思,在西班牙语中是“我非常爱你”的缩写(德马西亚多)

立即使您的循环显示一个智能进度表-只需用tqdm(iterable),你就完了!

from tqdm import tqdm
for i in tqdm(range(10000)):
    ...

76%|████████████████████████        | 7568/10000 [00:33<00:10, 229.00it/s]

trange(N)还可以用作以下操作的便捷快捷方式tqdm(range(N))

它还可以作为带有管道的模块执行:

$ seq 9999999 | tqdm --bytes | wc -l
75.2MB [00:00, 217MB/s]
9999999

$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \
    > backup.tgz
 32%|██████████▍                      | 8.89G/27.9G [00:42<01:31, 223MB/s]

开销很低–每次迭代约60 ns(80 ns,tqdm.gui),并针对性能回归进行单元测试。相比之下,久负盛名的ProgressBar具有800 ns/ITER开销

除了开销低之外,tqdm使用智能算法预测剩余时间并跳过不必要的迭代显示,这在大多数情况下可以忽略不计的开销

tqdm可在任何平台(Linux、Windows、Mac、FreeBSD、NetBSD、Solaris/SunOS)、任何控制台或GUI中运行,并且与IPython/Jupyter笔记本电脑也很友好

tqdm不需要任何依赖项(甚至不需要curses!),只有Python和一个支持carriage return \rline feed \n控制字符


Installation

Latest PyPI stable release


pip install tqdm

Latest development release on GitHub

拉入并安装预发行版devel分支机构:

pip install "git+https://github.com/tqdm/tqdm.git@devel#egg=tqdm"

Latest Conda release

conda install -c conda-forge tqdm

Latest Snapcraft release

有3个频道可供选择:

snap install tqdm  # implies --stable, i.e. latest tagged release
snap install tqdm  --candidate  # master branch
snap install tqdm  --edge  # devel branch

请注意,snap二进制文件仅供CLI使用(而不是import-可用),并自动设置bash制表符完成

Latest Docker release

docker pull tqdm/tqdm
docker run -i --rm tqdm/tqdm --help

Other

还有其他(非官方的)地方tqdm可以下载,特别是对于CLI使用:


Changelog

所有更改的列表可在GitHub的版本上获得:,在wiki,或在website

Usage

tqdm是非常多才多艺的,可以有多种用途。下面给出了三个主要的原因

Iterable-based

包装tqdm()围绕任何可迭代:

from tqdm import tqdm
from time import sleep

text = ""
for char in tqdm(["a", "b", "c", "d"]):
    sleep(0.25)
    text = text + char

trange(i)是一个特殊的优化实例tqdm(range(i))

from tqdm import trange

for i in trange(100):
    sleep(0.01)

循环外的实例化允许手动控制tqdm()

pbar = tqdm(["a", "b", "c", "d"])
for char in pbar:
    sleep(0.25)
    pbar.set_description("Processing %s" % char)

Manual

手动控制tqdm()使用with声明:

with tqdm(total=100) as pbar:
    for i in range(10):
        sleep(0.1)
        pbar.update(10)

如果可选变量total(或使用可迭代的len()),则显示预测统计信息

with也是可选的(您可以直接将tqdm()赋给一个变量,但在这种情况下,不要忘记delclose()在结尾处:

pbar = tqdm(total=100)
for i in range(10):
    sleep(0.1)
    pbar.update(10)
pbar.close()

Module

也许最奇妙的用法就是tqdm是在脚本中还是在命令行上。简单地插入tqdm(或python -m tqdm)之间的管道将通过所有stdinstdout将进度打印到时stderr

下面的示例演示了如何计算当前目录中所有Python文件中的行数,其中包括计时信息

$ time find . -name '*.py' -type f -exec cat \{} \; | wc -l
857365

real    0m3.458s
user    0m0.274s
sys     0m3.325s

$ time find . -name '*.py' -type f -exec cat \{} \; | tqdm | wc -l
857366it [00:03, 246471.31it/s]
857365

real    0m3.585s
user    0m0.862s
sys     0m3.358s

请注意,通常的论点是tqdm也可以指定

$ find . -name '*.py' -type f -exec cat \{} \; |
    tqdm --unit loc --unit_scale --total 857366 >> /dev/null
100%|█████████████████████████████████| 857K/857K [00:04<00:00, 246Kloc/s]

备份一个大目录吗?

$ tar -zcf - docs/ | tqdm --bytes --total `du -sb docs/ | cut -f1` \
  > backup.tgz
 44%|██████████████▊                   | 153M/352M [00:14<00:18, 11.0MB/s]

这还可以进一步美化:

$ BYTES="$(du -sb docs/ | cut -f1)"
$ tar -cf - docs/ \
  | tqdm --bytes --total "$BYTES" --desc Processing | gzip \
  | tqdm --bytes --total "$BYTES" --desc Compressed --position 1 \
  > ~/backup.tgz
Processing: 100%|██████████████████████| 352M/352M [00:14<00:00, 30.2MB/s]
Compressed:  42%|█████████▎            | 148M/352M [00:14<00:19, 10.9MB/s]

或使用7-zip在文件级完成:

$ 7z a -bd -r backup.7z docs/ | grep Compressing \
  | tqdm --total $(find docs/ -type f | wc -l) --unit files \
  | grep -v Compressing
100%|██████████████████████████▉| 15327/15327 [01:00<00:00, 712.96files/s]

已经输出基本进度信息的现有CLI程序将受益于tqdm%s--update--update_to标志:

$ seq 3 0.1 5 | tqdm --total 5 --update_to --null
100%|████████████████████████████████████| 5.0/5 [00:00<00:00, 9673.21it/s]
$ seq 10 | tqdm --update --null  # 1 + 2 + ... + 10 = 55 iterations
55it [00:00, 90006.52it/s]

FAQ and Known Issues

最常见的问题与多行输出过多有关,而不是整齐的单行进度条

  • 一般控制台:需要回车支持(CR\r)
  • 嵌套进度条:
    • 一般控制台:需要支持将光标上移到上一行。例如,IDLEConEmuPyCharm(亦请参阅herehere,以及here)缺乏全力支持
    • Windows:另外可能需要Python模块colorama要确保嵌套条位于各自的行内,请执行以下操作
  • Unicode:
    • 报告支持Unicode的环境将具有稳定、平滑的进度条。后备方案是一个ascii-仅限栏
    • Windows控制台通常只部分支持Unicode,因此often require explicit ascii=True(亦请参阅here)。这是因为普通宽度的Unicode字符错误地显示为“宽”,或者某些Unicode字符未呈现
  • 包裹生成器:
    • 生成器包装函数倾向于隐藏可迭代的长度tqdm不会
    • 替换tqdm(enumerate(...))使用enumerate(tqdm(...))tqdm(enumerate(x), total=len(x), ...)同样的道理也适用于numpy.ndenumerate
    • 替换tqdm(zip(a, b))使用zip(tqdm(a), b)甚至是zip(tqdm(a), tqdm(b))
    • 同样的道理也适用于itertools
    • 一些有用的方便函数可以在下面的tqdm.contrib
  • Hanging pipes in python2:使用时tqdm在CLI上,您可能需要使用Python 3.5+才能正确缓冲
  • No intermediate output in docker-compose:使用docker-compose run而不是docker-compose uptty: true

如果您遇到任何其他困难,请浏览并归档

Documentation

(自2016年5月19日起)

class tqdm():
  """
  Decorate an iterable object, returning an iterator which acts exactly
  like the original iterable, but prints a dynamically updating
  progressbar every time a value is requested.
  """

  def __init__(self, iterable=None, desc=None, total=None, leave=True,
               file=None, ncols=None, mininterval=0.1,
               maxinterval=10.0, miniters=None, ascii=None, disable=False,
               unit='it', unit_scale=False, dynamic_ncols=False,
               smoothing=0.3, bar_format=None, initial=0, position=None,
               postfix=None, unit_divisor=1000):

Parameters

  • 可迭代的:可迭代,可选
    可重复使用进度条进行装饰。保留为空可手动管理更新
  • 说明:字符串,可选
    进度栏的前缀
  • 总计:整型或浮点型,可选
    预期迭代次数。如果未指定,则在可能的情况下使用len(可迭代)。如果为FLOAT(“inf”)或作为最后手段,则仅显示基本进度统计信息(无ETA,无进度条)。如果gui为True并且此参数需要后续更新,请指定初始任意大正数,例如9e9
  • 离开吧:布尔值,可选
    如果为[default:true],则在迭代终止时保留进度条的所有痕迹。如果None,只有在以下情况下才会离开position0
  • 文件:io.TextIOWrapperio.StringIO,可选
    指定输出进度消息的位置(默认值:sys.stderr)。用途file.write(str)file.flush()方法。有关编码信息,请参见write_bytes
  • 乙二醇:整型,可选
    整个输出消息的宽度。如果指定,则动态调整进度条的大小以保持在此范围内。如果未指定,则尝试使用环境宽度。后备宽度为10米,对计数器和统计数据没有限制。如果为0,则不打印任何仪表(仅打印统计数据)
  • 最小间隔:浮动,可选
    最小进度显示更新间隔[默认值:0.1]秒
  • 最大间隔:浮动,可选
    最大进度显示更新间隔[默认值:10]秒。自动调整miniters与…相对应mininterval在长时间显示更新延迟之后。仅在以下情况下才有效dynamic_miniters或者启用了监视器线程
  • 小型矿车:整型或浮点型,可选
    最小进度显示更新间隔,以迭代为单位。如果为0且dynamic_miniters,将自动调整为等于mininterval(CPU效率更高,适用于紧密循环)。如果>0,将跳过指定迭代次数的显示。调整此选项,然后mininterval以获得非常有效的循环。如果快速迭代和慢速迭代(网络、跳过项目等)的进度都不稳定,则应该将miniters设置为1
  • ASCII:布尔值或字符串,可选
    如果未指定或为False,则使用Unicode(平滑块)填充仪表。备用方法是使用ASCII码字符“123456789#”
  • 禁用:布尔值,可选
    是否禁用整个进度栏包装[默认值:false]。如果设置为None,则在非TTY上禁用
  • 单位:字符串,可选
    将用于定义每个迭代的单位的字符串[默认值:it]
  • 单位_刻度:Bool、int或Float,可选
    如果为1或True,则迭代次数将自动减少/缩放,并将添加遵循国际单位制标准的公制前缀(千、兆等)[默认值:FALSE]。如果有任何其他非零数,将缩放totaln
  • 动态参数(_N):布尔值,可选
    如果设置,则会不断更改ncolsnrows到环境(允许调整窗口大小)[默认值:FALSE]
  • 平滑:浮动,可选
    速度估计的指数移动平均平滑系数(在GUI模式中忽略)。范围从0(平均速度)到1(当前/瞬时速度)[默认值:0.3]
  • 条形图格式(_F):字符串,可选
    指定自定义条形字符串格式。可能会影响性能。[默认值:‘{l_bar}{bar}{r_bar}’],其中l_bar=‘{desc}:{percentage:3.0f}%|’,r_bar=‘|{n_fmt}/{total_fmt}[{elapsed}<{reaving},’{rate_fmt}{postfix}]‘’可能的变量:l_bar,bar,r_bar,n,n_fmt,total,total_fmt,百分比,已用rate_noinv、rate_noinv_fmt、rate_inv、rate_inv_fmt、后缀、unit_ditor、剩余、剩余_s、eta。请注意,如果{desc}为空,则会在{desc}之后自动删除尾随的“:”
  • 首字母:整型或浮点型,可选
    初始计数器值。重新启动进度条时非常有用[默认值:0]。如果使用浮点,请考虑指定{n:.3f}或类似于bar_format,或指定unit_scale
  • 职位:整型,可选
    如果未指定,请指定自动打印此条形图的行偏移量(从0开始)。一次管理多个条形图非常有用(例如,从线程)
  • 后缀:DICT或*,可选
    指定要在条末尾显示的其他统计信息。呼叫set_postfix(**postfix)如果可能(DICT)
  • 单位_除数:浮动,可选
    [默认值:1000],除非忽略unit_scale是真的吗?
  • 写入字节(_B):布尔值,可选
    如果(默认值:无)和file未指定,则将使用Python 2写入字节。如果True还将写入字节。在所有其他情况下,将默认为Unicode
  • 锁定参数(_A):元组,可选
    已传递给refresh用于中间输出(初始化、迭代和更新)
  • n行:整型,可选
    屏幕高度。如果指定,则隐藏此边界之外的嵌套条。如果未指定,则尝试使用环境高度。退而求其次是20
  • 颜色:字符串,可选
    条形图颜色(例如“绿色”、“#00ff00”)
  • 延迟:浮动,可选
    在经过[默认值:0]秒之前不显示

Extra CLI Options

  • 神志不清:CHR,可选
    分隔字符[默认值:‘n’]。使用“0”表示NULL。注:在Windows系统上,Python将‘n’转换为‘rn’
  • buf_size:整型,可选
    字符串缓冲区大小(以字节为单位)[默认值:256]在以下情况下使用delim已指定
  • 字节数:布尔值,可选
    如果为true,将计算字节数,忽略delim和Defaultunit_scale为了真的,unit_divisor设置为1024,并且unit到“B”
  • T形三通:布尔值,可选
    如果为true,则通过stdin对两个人都是stderrstdout
  • 更新:布尔值,可选
    如果为true,则将输入视为新经过的迭代,即要传递到的数字update()请注意,这很慢(~2e5 it/s),因为每个输入都必须解码为数字
  • 更新目标(_T):布尔值,可选
    如果为true,则将输入视为已用迭代总数,即要分配给的数字self.n请注意,这很慢(~2e5 it/s),因为每个输入都必须解码为数字
  • 空:布尔值,可选
    如果为true,将丢弃输入(无标准输出)
  • 人工路径:字符串,可选
    要安装tqdm手册页的目录
  • 压缩路径:字符串,可选
    放置tqdm完成的目录
  • 日志:字符串,可选
    严重|致命|错误|警告(ING)|[默认值:‘INFO’]|DEBUG|NOTSET

Returns

  • 输出:修饰迭代器
class tqdm():
  def update(self, n=1):
      """
      Manually update the progress bar, useful for streams
      such as reading files.
      E.g.:
      >>> t = tqdm(total=filesize) # Initialise
      >>> for current_buffer in stream:
      ...    ...
      ...    t.update(len(current_buffer))
      >>> t.close()
      The last line is highly recommended, but possibly not necessary if
      ``t.update()`` will be called in such a way that ``filesize`` will be
      exactly reached and printed.

      Parameters
      ----------
      n  : int or float, optional
          Increment to add to the internal counter of iterations
          [default: 1]. If using float, consider specifying ``{n:.3f}``
          or similar in ``bar_format``, or specifying ``unit_scale``.

      Returns
      -------
      out  : bool or None
          True if a ``display()`` was triggered.
      """

  def close(self):
      """Cleanup and (if leave=False) close the progressbar."""

  def clear(self, nomove=False):
      """Clear current bar display."""

  def refresh(self):
      """
      Force refresh the display of this bar.

      Parameters
      ----------
      nolock  : bool, optional
          If ``True``, does not lock.
          If [default: ``False``]: calls ``acquire()`` on internal lock.
      lock_args  : tuple, optional
          Passed to internal lock's ``acquire()``.
          If specified, will only ``display()`` if ``acquire()`` returns ``True``.
      """

  def unpause(self):
      """Restart tqdm timer from last print time."""

  def reset(self, total=None):
      """
      Resets to 0 iterations for repeated use.

      Consider combining with ``leave=True``.

      Parameters
      ----------
      total  : int or float, optional. Total to use for the new bar.
      """

  def set_description(self, desc=None, refresh=True):
      """
      Set/modify description of the progress bar.

      Parameters
      ----------
      desc  : str, optional
      refresh  : bool, optional
          Forces refresh [default: True].
      """

  def set_postfix(self, ordered_dict=None, refresh=True, **tqdm_kwargs):
      """
      Set/modify postfix (additional stats)
      with automatic formatting based on datatype.

      Parameters
      ----------
      ordered_dict  : dict or OrderedDict, optional
      refresh  : bool, optional
          Forces refresh [default: True].
      kwargs  : dict, optional
      """

  @classmethod
  def write(cls, s, file=sys.stdout, end="\n"):
      """Print a message via tqdm (without overlap with bars)."""

  @property
  def format_dict(self):
      """Public API for read-only member access."""

  def display(self, msg=None, pos=None):
      """
      Use ``self.sp`` to display ``msg`` in the specified ``pos``.

      Consider overloading this function when inheriting to use e.g.:
      ``self.some_frontend(**self.format_dict)`` instead of ``self.sp``.

      Parameters
      ----------
      msg  : str, optional. What to display (default: ``repr(self)``).
      pos  : int, optional. Position to ``moveto``
        (default: ``abs(self.pos)``).
      """

  @classmethod
  @contextmanager
  def wrapattr(cls, stream, method, total=None, bytes=True, **tqdm_kwargs):
      """
      stream  : file-like object.
      method  : str, "read" or "write". The result of ``read()`` and
          the first argument of ``write()`` should have a ``len()``.

      >>> with tqdm.wrapattr(file_obj, "read", total=file_obj.size) as fobj:
      ...     while True:
      ...         chunk = fobj.read(chunk_size)
      ...         if not chunk:
      ...             break
      """

  @classmethod
  def pandas(cls, *targs, **tqdm_kwargs):
      """Registers the current `tqdm` class with `pandas`."""

def trange(*args, **tqdm_kwargs):
    """
    A shortcut for `tqdm(xrange(*args), **tqdm_kwargs)`.
    On Python3+, `range` is used instead of `xrange`.
    """

Convenience Functions

def tqdm.contrib.tenumerate(iterable, start=0, total=None,
                            tqdm_class=tqdm.auto.tqdm, **tqdm_kwargs):
    """Equivalent of `numpy.ndenumerate` or builtin `enumerate`."""

def tqdm.contrib.tzip(iter1, *iter2plus, **tqdm_kwargs):
    """Equivalent of builtin `zip`."""

def tqdm.contrib.tmap(function, *sequences, **tqdm_kwargs):
    """Equivalent of builtin `map`."""

Submodules

class tqdm.notebook.tqdm(tqdm.tqdm):
    """IPython/Jupyter Notebook widget."""

class tqdm.auto.tqdm(tqdm.tqdm):
    """Automatically chooses beween `tqdm.notebook` and `tqdm.tqdm`."""

class tqdm.asyncio.tqdm(tqdm.tqdm):
  """Asynchronous version."""
  @classmethod
  def as_completed(cls, fs, *, loop=None, timeout=None, total=None,
                   **tqdm_kwargs):
      """Wrapper for `asyncio.as_completed`."""

class tqdm.gui.tqdm(tqdm.tqdm):
    """Matplotlib GUI version."""

class tqdm.tk.tqdm(tqdm.tqdm):
    """Tkinter GUI version."""

class tqdm.rich.tqdm(tqdm.tqdm):
    """`rich.progress` version."""

class tqdm.keras.TqdmCallback(keras.callbacks.Callback):
    """Keras callback for epoch and batch progress."""

class tqdm.dask.TqdmCallback(dask.callbacks.Callback):
    """Dask callback for task progress."""

contrib

这个tqdm.contrib软件包还包含实验模块:

  • tqdm.contrib.itertools:周围有薄薄的包装纸itertools
  • tqdm.contrib.concurrent:周围有薄薄的包装纸concurrent.futures
  • tqdm.contrib.discord:发布到Discord机器人
  • tqdm.contrib.telegram:发布到Telegram机器人
  • tqdm.contrib.bells:自动启用所有可选功能
    • autopandasdiscordtelegram

Examples and Advanced Usage

Description and additional stats

自定义信息可以在上动态显示和更新tqdm带有条形图的条形图descpostfix参数:

from tqdm import tqdm, trange
from random import random, randint
from time import sleep

with trange(10) as t:
    for i in t:
        # Description will be displayed on the left
        t.set_description('GEN %i' % i)
        # Postfix will be displayed on the right,
        # formatted automatically based on argument's datatype
        t.set_postfix(loss=random(), gen=randint(1,999), str='h',
                      lst=[1, 2])
        sleep(0.1)

with tqdm(total=10, bar_format="{postfix[0]} {postfix[1][value]:>8.2g}",
          postfix=["Batch", dict(value=0)]) as t:
    for i in range(10):
        sleep(0.1)
        t.postfix[1]["value"] = i / 2
        t.update()

使用时要记住的要点{postfix[...]}bar_format字符串:

  • postfix还需要以兼容格式作为初始参数传递,并且
  • postfix将自动转换为字符串(如果它是dict-类物体。要防止此行为,请在键不是字符串的字典中插入额外的项

附加内容bar_format参数也可以通过重写format_dict,并且可以使用以下命令修改栏本身ascii

from tqdm import tqdm
class TqdmExtraFormat(tqdm):
    """Provides a `total_time` format parameter"""
    @property
    def format_dict(self):
        d = super(TqdmExtraFormat, self).format_dict
        total_time = d["elapsed"] * (d["total"] or 0) / max(d["n"], 1)
        d.update(total_time=self.format_interval(total_time) + " in total")
        return d

for i in TqdmExtraFormat(
      range(9), ascii=" .oO0",
      bar_format="{total_time}: {percentage:.0f}%|{bar}{r_bar}"):
    if i == 4:
        break
00:00 in total: 44%|0000.     | 4/9 [00:00<00:00, 962.93it/s]

请注意,{bar}还支持格式说明符[width][type]

  • width
    • 未指定(默认):自动填充ncols
    • int >= 0:固定宽度替代ncols逻辑
    • int < 0:从自动缺省值中减去
  • type
    • a:ASCII(ascii=True覆盖)
    • u:unicode(ascii=False覆盖)
    • b:空白(ascii=" "覆盖)

这意味着可以使用以下方法创建具有右对齐文本的固定栏:bar_format="{l_bar}{bar:10}|{bar:-10b}right-justified"

Nested progress bars

tqdm支持嵌套进度条。下面是一个示例:

from tqdm.auto import trange
from time import sleep

for i in trange(4, desc='1st loop'):
    for j in trange(5, desc='2nd loop'):
        for k in trange(50, desc='3rd loop', leave=False):
            sleep(0.01)

要手动控制定位(例如,用于多处理),您可以指定position=n哪里n=0对于最外面的酒吧,n=1下一个,以此类推。不过,最好还是检查一下tqdm无需手动即可工作position第一

from time import sleep
from tqdm import trange, tqdm
from multiprocessing import Pool, RLock, freeze_support

L = list(range(9))

def progresser(n):
    interval = 0.001 / (n + 2)
    total = 5000
    text = "#{}, est. {:<04.2}s".format(n, interval * total)
    for _ in trange(total, desc=text, position=n):
        sleep(interval)

if __name__ == '__main__':
    freeze_support()  # for Windows support
    tqdm.set_lock(RLock())  # for managing output contention
    p = Pool(initializer=tqdm.set_lock, initargs=(tqdm.get_lock(),))
    p.map(progresser, L)

请注意,在Python3中,tqdm.write是否线程安全:

from time import sleep
from tqdm import tqdm, trange
from concurrent.futures import ThreadPoolExecutor

L = list(range(9))

def progresser(n):
    interval = 0.001 / (n + 2)
    total = 5000
    text = "#{}, est. {:<04.2}s".format(n, interval * total)
    for _ in trange(total, desc=text):
        sleep(interval)
    if n == 6:
        tqdm.write("n == 6 completed.")
        tqdm.write("`tqdm.write()` is thread-safe in py3!")

if __name__ == '__main__':
    with ThreadPoolExecutor() as p:
        p.map(progresser, L)

Hooks and callbacks

tqdm可以轻松支持回调/挂钩和手动更新。下面是一个包含以下内容的示例urllib

“urllib.urlsearche“文档

[.]
如果存在,将调用一次钩子函数
关于网络连接的建立和每次挡路阅读后的一次
之后。将向挂钩传递三个参数;块计数
到目前为止已传输的挡路大小(以字节为单位)和文件的总大小
[.]
import urllib, os
from tqdm import tqdm
urllib = getattr(urllib, 'request', urllib)

class TqdmUpTo(tqdm):
    """Provides `update_to(n)` which uses `tqdm.update(delta_n)`."""
    def update_to(self, b=1, bsize=1, tsize=None):
        """
        b  : int, optional
            Number of blocks transferred so far [default: 1].
        bsize  : int, optional
            Size of each block (in tqdm units) [default: 1].
        tsize  : int, optional
            Total size (in tqdm units). If [default: None] remains unchanged.
        """
        if tsize is not None:
            self.total = tsize
        return self.update(b * bsize - self.n)  # also sets self.n = b * bsize

eg_link = "https://caspersci.uk.to/matryoshka.zip"
with TqdmUpTo(unit='B', unit_scale=True, unit_divisor=1024, miniters=1,
              desc=eg_link.split('/')[-1]) as t:  # all optional kwargs
    urllib.urlretrieve(eg_link, filename=os.devnull,
                       reporthook=t.update_to, data=None)
    t.total = t.n

灵感来自twine#242中的功能替代examples/tqdm_wget.py

建议使用miniters=1每当迭代速度存在潜在较大差异时(例如,通过补丁连接下载文件)

包装读/写方法

要通过类似文件的对象测量吞吐量,请执行以下操作readwrite方法,使用CallbackIOWrapper

from tqdm.auto import tqdm
from tqdm.utils import CallbackIOWrapper

with tqdm(total=file_obj.size,
          unit='B', unit_scale=True, unit_divisor=1024) as t:
    fobj = CallbackIOWrapper(t.update, file_obj, "read")
    while True:
        chunk = fobj.read(chunk_size)
        if not chunk:
            break
    t.reset()
    # ... continue to use `t` for something else

或者,使用更简单的wrapattr便利函数,该函数将压缩两个urllibCallbackIOWrapper下面是示例:

import urllib, os
from tqdm import tqdm

eg_link = "https://caspersci.uk.to/matryoshka.zip"
response = getattr(urllib, 'request', urllib).urlopen(eg_link)
with tqdm.wrapattr(open(os.devnull, "wb"), "write",
                   miniters=1, desc=eg_link.split('/')[-1],
                   total=getattr(response, 'length', None)) as fout:
    for chunk in response:
        fout.write(chunk)

这个requests等价物几乎完全相同:

import requests, os
from tqdm import tqdm

eg_link = "https://caspersci.uk.to/matryoshka.zip"
response = requests.get(eg_link, stream=True)
with tqdm.wrapattr(open(os.devnull, "wb"), "write",
                   miniters=1, desc=eg_link.split('/')[-1],
                   total=int(response.headers.get('content-length', 0))) as fout:
    for chunk in response.iter_content(chunk_size=4096):
        fout.write(chunk)

自定义回调

tqdm以智能地跳过不必要的显示而闻名。要使自定义回调利用这一点,只需使用update()这设置为True如果一个display()已被触发

from tqdm.auto import tqdm as std_tqdm

def external_callback(*args, **kwargs):
    ...

class TqdmExt(std_tqdm):
    def update(self, n=1):
        displayed = super(TqdmExt, self).update(n):
        if displayed:
            external_callback(**self.format_dict)
        return displayed

asyncio

请注意,break当前未被异步迭代器捕获。这意味着tqdm在这种情况下,无法自行清理:

from tqdm.asyncio import tqdm

async for i in tqdm(range(9)):
    if i == 2:
        break

取而代之的是,或者调用pbar.close()手动或使用上下文管理器语法:

from tqdm.asyncio import tqdm

with tqdm(range(9)) as pbar:
    async for i in pbar:
        if i == 2:
            break

Pandas Integration

由于大众的需求,我们增加了对pandas–这里有一个例子DataFrame.progress_applyDataFrameGroupBy.progress_apply

import pandas as pd
import numpy as np
from tqdm import tqdm

df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))

# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`
# (can use `tqdm.gui.tqdm`, `tqdm.notebook.tqdm`, optional kwargs, etc.)
tqdm.pandas(desc="my bar!")

# Now you can use `progress_apply` instead of `apply`
# and `progress_map` instead of `map`
df.progress_apply(lambda x: x**2)
# can also groupby:
# df.groupby(0).progress_apply(lambda x: x**2)

如果您对这是如何工作的(以及如何为您自己的回调修改它)感兴趣,请参阅examples文件夹或导入模块,然后运行help()

Keras Integration

一个keras也可以回调:

from tqdm.keras import TqdmCallback

...

model.fit(..., verbose=0, callbacks=[TqdmCallback()])

Dask Integration

一个dask也可以回调:

from tqdm.dask import TqdmCallback

with TqdmCallback(desc="compute"):
    ...
    arr.compute()

# or use callback globally
cb = TqdmCallback(desc="global")
cb.register()
arr.compute()

IPython/Jupyter Integration

IPython/Jupyter通过tqdm.notebook子模块:

from tqdm.notebook import trange, tqdm
from time import sleep

for i in trange(3, desc='1st loop'):
    for j in tqdm(range(100), desc='2nd loop'):
        sleep(0.01)

除了……之外tqdm功能方面,该子模块提供原生Jupyter小部件(与IPythonv1-v4和Jupyter兼容)、完全工作的嵌套条和颜色提示(蓝色:正常、绿色:已完成、红色:错误/中断、浅蓝色:无ETA);如下所示



这个notebook版本支持总宽度的百分比或像素(例如:ncols='100%'ncols='480px')

也可以让tqdm自动选择控制台或笔记本电脑版本,方法是使用autonotebook子模块:

from tqdm.autonotebook import tqdm
tqdm.pandas()

请注意,这将发出一个TqdmExperimentalWarning如果在笔记本中运行,因为它不能区分jupyter notebookjupyter console使用auto而不是autonotebook要取消显示此警告,请执行以下操作

请注意,笔记本将在创建它的单元格中显示该条。这可能是与使用它的单元格不同的单元格。如果这也不是我们想要的,

  • 将栏的创建延迟到必须显示它的单元格,或者
  • 使用创建条形图display=False,并且在稍后的蜂窝呼叫中display(bar.container)
from tqdm.notebook import tqdm
pbar = tqdm(..., display=False)
# different cell
display(pbar.container)

这个keras回调有一个display()同样可以使用的方法:

from tqdm.keras import TqdmCallback
cbk = TqdmCallback(display=False)
# different cell
cbk.display()
model.fit(..., verbose=0, callbacks=[cbk])

另一种可能是拥有一个不断重复使用的条(靠近笔记本顶部)(使用reset()而不是close())。因此,笔记本版本(与CLI版本不同)不会自动调用close()在此基础上Exception

from tqdm.notebook import tqdm
pbar = tqdm()
# different cell
iterable = range(100)
pbar.reset(total=len(iterable))  # initialise with new `total`
for i in iterable:
    pbar.update()
pbar.refresh()  # force print final status but don't `close()`

Custom Integration

要更改默认参数(如进行dynamic_ncols=True),只需使用内置的Python魔术:

from functools import partial
from tqdm import tqdm as std_tqdm
tqdm = partial(std_tqdm, dynamic_ncols=True)

要进一步自定义,请参见tqdm可以从继承以创建自定义回调(与TqdmUpTo示例above)或用于自定义前端(例如,诸如笔记本或绘图包之类的GUI)。在后一种情况下:

  1. def __init__()要呼叫,请执行以下操作super().__init__(..., gui=True)禁用端子的步骤status_printer创作
  2. 重新定义:close()clear()display()

考虑超载display()使用,例如,使用self.frontend(**self.format_dict)而不是self.sp(repr(self))

继承的一些子模块示例:

Dynamic Monitor/Meter

您可以使用tqdm作为一个不是单调递增的韵律。这可能是因为n减少(例如CPU使用情况监视器)或total变化

递归搜索文件就是一个例子。这个total是到目前为止找到的对象数,而n是属于文件(而不是文件夹)的那些对象的数量:

from tqdm import tqdm
import os.path

def find_files_recursively(path, show_progress=True):
    files = []
    # total=1 assumes `path` is a file
    t = tqdm(total=1, unit="file", disable=not show_progress)
    if not os.path.exists(path):
        raise IOError("Cannot find:" + path)

    def append_found_file(f):
        files.append(f)
        t.update()

    def list_found_dir(path):
        """returns os.listdir(path) assuming os.path.isdir(path)"""
        listing = os.listdir(path)
        # subtract 1 since a "file" we found was actually this directory
        t.total += len(listing) - 1
        # fancy way to give info without forcing a refresh
        t.set_postfix(dir=path[-10:], refresh=False)
        t.update(0)  # may trigger a refresh
        return listing

    def recursively_search(path):
        if os.path.isdir(path):
            for f in list_found_dir(path):
                recursively_search(os.path.join(path, f))
        else:
            append_found_file(path)

    recursively_search(path)
    t.set_postfix(dir=path)
    t.close()
    return files

使用update(0)是一种方便的方式来让tqdm决定何时触发显示刷新以避免控制台垃圾邮件

Writing messages

这是一项正在进行的工作(请参见#737)

因为tqdm使用简单的打印机制显示进度条,您不应该在终端中使用print()当进度条打开时

在终端中写入消息而不与其发生任何冲突tqdm条形图显示,a.write()提供了一种方法:

from tqdm.auto import tqdm, trange
from time import sleep

bar = trange(10)
for i in bar:
    # Print using tqdm class method .write()
    sleep(0.1)
    if not (i % 3):
        tqdm.write("Done task %i" % i)
    # Can also use bar.write()

默认情况下,这将打印到标准输出sys.stdout但是您可以使用file论点。例如,这可用于将写入日志文件或类的消息重定向

Redirecting writing

如果使用可以将消息打印到控制台的库,请通过替换print()使用tqdm.write()可能不是我们想要的。在这种情况下,重定向sys.stdouttqdm.write()是一种选择

要重定向,请执行以下操作sys.stdout,创建一个类似文件的类,该类将把任何输入字符串写入tqdm.write(),并提供参数file=sys.stdout, dynamic_ncols=True

下面给出了一个可重用的规范示例:

from time import sleep
import contextlib
import sys
from tqdm import tqdm
from tqdm.contrib import DummyTqdmFile


@contextlib.contextmanager
def std_out_err_redirect_tqdm():
    orig_out_err = sys.stdout, sys.stderr
    try:
        sys.stdout, sys.stderr = map(DummyTqdmFile, orig_out_err)
        yield orig_out_err[0]
    # Relay exceptions
    except Exception as exc:
        raise exc
    # Always restore sys.stdout/err if necessary
    finally:
        sys.stdout, sys.stderr = orig_out_err

def some_fun(i):
    print("Fee, fi, fo,".split()[i])

# Redirect stdout to tqdm.write() (don't forget the `as save_stdout`)
with std_out_err_redirect_tqdm() as orig_stdout:
    # tqdm needs the original stdout
    # and dynamic_ncols=True to autodetect console width
    for i in tqdm(range(3), file=orig_stdout, dynamic_ncols=True):
        sleep(.5)
        some_fun(i)

# After the `with`, printing is restored
print("Done!")

Redirecting logging

类似于sys.stdout/sys.stderr如上所述,控制台logging也可以重定向到tqdm.write()

警告:如果还重定向sys.stdout/sys.stderr,请务必重定向logging如果需要,先来

中提供了帮助器方法tqdm.contrib.logging例如:

import logging
from tqdm import trange
from tqdm.contrib.logging import logging_redirect_tqdm

LOG = logging.getLogger(__name__)

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    with logging_redirect_tqdm():
        for i in trange(9):
            if i == 4:
                LOG.info("console logging redirected to `tqdm.write()`")
    # logging restored

Monitoring thread, intervals and miniters

tqdm实施一些技巧来提高效率和降低管理费用

  • 避免不必要的频繁条刷新:mininterval定义每次刷新之间等待的时间。tqdm始终在后台更新,但它将仅在mininterval
  • 减少检查系统时钟/时间的调用次数
  • mininterval比起配置更直观miniters巧妙的调整系统dynamic_miniters将自动调整miniters与时间相适应的迭代次数mininterval从本质上讲,tqdm将在不实际检查时间的情况下检查是否到了打印时间。通过手动设置,仍可绕过此行为miniters

但是,请考虑快速迭代和慢速迭代相结合的情况。在几次快速迭代之后,dynamic_miniters将设置miniters变成了一个大数目。当迭代速率随后减慢时,miniters将保持较大,从而降低显示更新频率。要解决此问题,请执行以下操作:

  • maxinterval定义显示刷新之间的最长时间。并发监视线程检查过期的更新,并在必要时强制更新

监视线程不应该有明显的开销,并且默认情况下保证至少每10秒更新一次。该值可以通过设置monitor_interval任何tqdm实例(即t = tqdm.tqdm(...); t.monitor_interval = 2)。可以通过设置在应用程序范围内禁用监视线程tqdm.tqdm.monitor_interval = 0在实例化任何tqdm钢筋

Merch

你可以买到tqdm branded merch现在!

Contributions

所有源代码都托管在GitHub欢迎投稿

请参阅CONTRIBUTING有关详细信息,请参阅文件

做出重大贡献的开发人员,按SLOC(幸存的代码行,git fame-wMC --excl '\.(png|gif|jpg)$'),包括:

名字 ID号 SLOC 注意事项
卡斯珀·达·科斯塔-路易斯 casperdcl ~81% 主要维护人员
斯蒂芬·拉罗克 lrq3000 ~10% 团队成员
马丁·祖格诺尼 martinzugnoni ~3% 他说:
理查德·谢里登 richardsheridan ~1% 他说:
陈广硕 chengs ~1% 他说:
凯尔·阿尔滕多夫 altendky <1% 他说:
马修·史蒂文斯 mjstevens777 <1% 他说:
哈德琳·玛丽 hadim <1% 团队成员
伊万·伊万诺夫 obiwanus <1% 他说:
丹尼尔·潘特莱特 danielpanteleit <1% 他说:
乔纳斯·哈格 jonashaag <1% 他说:
詹姆斯·E·金三世 jeking3 <1% 他说:
诺姆·约拉夫-拉斐尔 noamraph <1% 原作者
米哈伊尔·科罗博夫 kmike <1% 团队成员

Ports to Other Languages

有关列表,请访问this wiki page

LICENCE

开源(OSI批准):

引文信息:

(自2016年5月19日起)