Python的调用栈分析器。显示为什么你的代码运行缓慢!
项目描述
pyinstrument
Pyinstrument是一个Python分析器。分析器是一个帮助您优化代码(使其更快)的工具。为了获得最大的速度提升,您应该关注程序中运行最慢的部分。Pyinstrument可以帮助您找到它!
☕️ 不知从何开始?查看来自calmcode.io的视频教程!
安装
pip install pyinstrument
Pyinstrument支持Python 3.8+。
要从git checkout运行Pyinstrument,有一个构建步骤。有关更多信息,请参阅贡献。
文档
要了解如何使用pyinstrument或检查参考,请访问文档。
已知问题
- 在Docker容器内分析代码可能会产生一些奇怪的结果,因为pyinstrument使用的gettimeofday系统调用在该环境中较慢。参见#83
- 当使用
pyinstrument script.py
,其中script.py
包含使用pickle
序列化的类时,可能会遇到错误,因为序列化机制不知道__main__
在哪里。参见此问题以获取解决方案
变更日志
v4.7.3
2024年9月6日
- 修复了4.7.0版本中引入的一个bug,该bug会导致在分析包含非典型局部变量的代码时,分析器崩溃,尤其是某些pytest扩展(#332)
- 修复了一个bug,该bug会导致pyinstrument在Python 3.12或更高版本中无法导入如
glom
之类的包,这些包会修改locals()字典(#336) - 修复了一些平台上出现的
UnicodeDecodeError
错误(#330) - 修复了一些情况下发生的除以零错误
- IPython集成采取了更大的步骤来确保干净的配置输出,通过确保在打印之前删除内部框架(#321)
v4.7.2
2024年8月5日
- 添加CPython 3.13的wheel文件
- 修复了导致HTML输出在某些浏览器上下文中无法渲染的bug(#328)
v4.7.1
2024年8月2日
- 修复了与PyPI上传相关的问题
v4.7.0
2024年8月1日
- 添加了一个新的、方便的API,用于分析Python代码的片段!现在您可以使用
with
块或函数/方法装饰器来分析。这将分析代码并将简短的读数打印到终端(#327) - 添加了新的、开销较低的计时选项。Pyinstrument在每次Python函数调用时都会调用计时器,这在提供快速计时的系统上效果很好,但在每个都需要系统调用的系统上,如某些Docker环境,它会增加显著的开销。Pyinstrument现在将检测慢速计时器,并显示警告并提供两种选择。您可以启用“计时线程”,将计时工作负载从被分析的线程卸载,或者,如果您对较低的分辨率满意,可以选择使用“粗略”计时器,该计时器在某些Linux系统上提供(#273)
- 在HTML输出中Alt点击行以折叠/展开整个树(#325)
- 向控制台输出添加了
flat
参数,以呈现函数的平面列表(#294) - 添加了Litestar示例配置和文档(#284)
- 初步支持Python 3.13(#322)
v4.6.2
2024年1月26日
- 修复了pstats渲染器中的bug,输出中可能会看到额外的框架(#287)
- 向Profiler.output_html添加了
show_all
选项
v4.6.1
2023年11月8日
- 修复了IPython魔法
%pyinstrument
中不想要的变量展开的bug(#278)
v4.6.0
2023年10月12日
- 添加了
-c
功能,允许直接从命令行分析代码,如python -c
。(#271) - 添加了一个方便的方法
Profiler.write_html
,用于直接将HTML输出写入文件(#266)
v4.5.3
2023年9月7日
- 修复了在打包过程中导致无法上传到PyPI的问题
v4.5.2
2023年9月1日
- 在HTML输出的标题中显示程序名称(#260)
- 提高程序名称捕获的鲁棒性,通过抵抗其他程序修改sys.argv(#258)
- 添加了对Python 3.12的支持(#246)
v4.5.1
2023年7月22日
- 修复了由于
__tracebackhide__
(#255)导致删除框架时输出中出现[X frames hidden]
的bug。 - 修复了内置代码在控制台输出中显示
None
文件路径的bug(#254)。 - 一些文档改进(#251)。
v4.5.0
2023年6月5日
- 添加了控制台渲染器的平面模式,可以通过在命令行中传递
-p flat
来启用。此模式显示按自时间测量的最重的框架,这在某些代码库中可能很有用(#240)。 - 添加了保存
pstats
文件的功能。这是stdlib中cprofile使用的文件格式。它比pyinstrument配置文件详细,但与更多工具兼容(#236)。 - 修复了
--show-all
选项的一个细节 - 当提供此选项时,pyinstrument将不再删除Python内部框架(#239)。 - 在HTML渲染器内部,现在使用Svelte渲染前端,这意味着配置文件更少地捆绑javascript,因此文件更小(#222)。
v4.4.0
2022年11月5日
- 在控制台和HTML输出中添加了方法类的名称(#203)。
- 修复了导致pyinstrument机制出现在配置文件开头的bug(#215)。
- 设置了
__traceback_hide__
局部变量的框架现在将从输出中删除(#217)。 - Jupyter/IPython魔法现在支持async/await,如果您使用带有
--async_mode=enabled
标志运行,则支持(#212)。 - 修复了在线程中捕获多个根框架时的崩溃问题 - 这可能会在gevent中发生。
- 对后端进行了重大重构,允许捕获不仅仅是静态信息。目前这仅用于支持类名功能,但未来还有更多!
v4.3.0
2022年8月21日
- 在HTML输出中添加了按钮,可以在绝对时间和比例(百分比)时间之间切换。
- 添加了命令行标志
--interval
(秒,默认0.001),用于更改pyinstrument采样程序的间隔。这对于长时间运行程序很有用,其中增加间隔可以减少内存开销。 - 包括CPython 3.11的wheels。
v4.2.0
-
添加了命令行选项
-p
--render-option
,允许任意设置渲染选项。这允许您从命令行设置选项,如filter_threshold
,例如通过执行类似pyinstrument -p processor_options.filter_threshold=0
的操作。以下是该选项的帮助输出
-p RENDER_OPTION, --render-option=RENDER_OPTION options to pass to the renderer, in the format 'flag_name' or 'option_name=option_value'. For example, to set the option 'time', pass '-p time=percent_of_total'. To pass multiple options, use the -p option multiple times. You can set processor options using dot-syntax, like '-p processor_options.filter_threshold=0'. option_value is parsed as a JSON value or a string.
-
添加了将控制台输出中的时间视为百分比而不是绝对时间的功能。使用ConsoleRenderer选项
time='percent_of_total'
,或在命令行中,使用-p
,例如pyinstrument -p time=percent_of_total
。 -
添加了加载和保存pyinstrument会话的命令行选项。您可以使用
-r session
将pyinstrument会话的原始数据保存下来,例如pyinstrument -r session -o session.pyisession myscript.py
。加载是通过--load
完成的,例如pyinstrument --load session.pyisession
。 -
命令行输出格式由
-o
输出文件的扩展名推断。因此,如果您执行pyinstrument -o profile.html myscript.py
,您不需要提供-r html
,pyinstrument将自动使用HTML渲染器。或者如果您执行pyinstrument -o profile.pyisession myscript.py
,它将保存原始会话对象。 -
将FastAPI和pytest的使用示例添加到文档中。
-
修复了使用
async_mode=strict
时导致NotImplementedError的bug。 -
添加了对Python 3.11的支持。
v4.1.1
- 修复了当使用speedscope渲染器时,PYINSTRUMENT_PROFILE_DIR_RENDERER输出错误文件扩展名的issue。
v4.1.0
- 现在您可以在IPython笔记本中使用pyinstrument原生!只需在笔记本顶部使用
%load_ext pyinstrument
,然后在您想要配置文件的单元中使用%%pyinstrument
。 - 添加了对speedscope格式的支持。这提供了一种使用pyinstrument查看交互式火焰图的途径。要使用,请使用
pyinstrument -r speedscope
进行配置文件,然后上传到speedscope网络应用程序。 - 现在,您可以使用
PYINSTRUMENT_PROFILE_DIR_RENDERER
选项来配置 Django 中间件文件输出的渲染器。 - 增加了 Linux aarch64 (64位ARM) 的wheel版本。
v4.0.4
- 修复了安装名为 'test' 的包时与 pyinstrument 共存的问题
- 使用更现代的C API来解决Python 3.10上的弃用警告。
- 一些文档修正
v4.0.3
- 支持CPython 3.10
- 改进了从多个线程尝试使用Profiler时的错误信息
- 修复了渲染包含FrameGroup中模块的会话时的崩溃问题
v4.0.2
- 修复了一些打包问题
v4.0.0
-
异步支持!Pyinstrument现在可以检测异步任务是否遇到了await,并跟踪在此await下异步上下文外的耗时。
例如,这里有一个包含异步任务的简单脚本,该任务执行sleep操作
import asyncio from pyinstrument import Profiler async def main(): p = Profiler(async_mode='disabled') with p: print('Hello ...') await asyncio.sleep(1) print('... World!') p.print() asyncio.run(main())
在Pyinstrument 4.0.0之前,我们只能看到运行循环中的时间,如下所示
_ ._ __/__ _ _ _ _ _/_ Recorded: 18:33:03 Samples: 2 /_//_/// /_\ / //_// / //_'/ // Duration: 1.006 CPU time: 0.001 / _/ v3.4.2 Program: examples/async_example_simple.py 1.006 _run_once asyncio/base_events.py:1784 └─ 1.005 select selectors.py:553 [3 frames hidden] selectors, <built-in> 1.005 kqueue.control <built-in>:0
现在,使用pyinstrument 4.0.0,我们得到
_ ._ __/__ _ _ _ _ _/_ Recorded: 18:30:43 Samples: 2 /_//_/// /_\ / //_// / //_'/ // Duration: 1.007 CPU time: 0.001 / _/ v4.0.0 Program: examples/async_example_simple.py 1.006 main async_example_simple.py:4 └─ 1.005 sleep asyncio/tasks.py:641 [2 frames hidden] asyncio 1.005 [await]
有关更多信息,请参阅异步分析文档和Profiler.async_mode 属性。
-
Pyinstrument有一个文档网站,包括完整的Python API文档!
v3.4.2
- 修复了导致命令行上忽略
--show
、--show-regex
、--show-all
的bug。
v3.4.1
- 底层现代化
v3.4.0
- 为Profiler方法的
output_html()
和open_in_browser()
添加了timeline
选项(布尔值)。
v3.3.0
- 修复了
pyinstrument -m module
的问题,其中pyinstrument找不到当前目录中的模块。 - 停止支持Python 2.7和3.5。旧版本将保留在PyPI上,pip应自动选择正确的版本。
v3.2.0
- 增加了跟踪C函数耗时的能力。注意 - 由于Python记录帧的限制,Pyinstrument将记录C函数的耗时为“叶”函数。例如,“Python -> C -> Python”被记录为“Python -> Python”,但“Python -> Python -> C”将被正确归因。(#103)
v3.1.2
- 修复了报告中出现
<__array_function__ internals>
帧的问题,这些帧被错误地显示为应用程序代码。
v3.1.1
- 添加了对HTML和JSON渲染器的timeline模式的支持。
- 同时以tarball和通用wheel的形式发布。
v3.1.0
- 在Django中间件中添加了PYINSTRUMENT_SHOW_CALLBACK选项,用于添加条件以显示配置文件(可以在实时服务器上运行pyinstrument!)
- 修复了Django中间件中的bug,由于Unicode错误,文件不会写入。
v3.0.3
- 修复了在Windows上Django中间件的bug,由于我们在配置文件路径中尝试放置非法字符'?',导致分析失败。(#66)
v3.0.2
- 添加了
--show
和--show-regex
选项,用于标记要显示的某些文件。这有助于在特定模块中进行分析,同时隐藏其他模块。例如,pyinstrument --show '*/sympy/*' script.py
。
v3.0.1
- 修复了#60:将所有参数传递给-m module_name后面的调用模块
- 修复了在HTML/JSON输出时没有捕获帧时的崩溃问题。
v3.0.0
-
Pyinstrument现在将隐藏您使用的库中的跟踪。因此,而不是显示大量的帧通过外部内容的内部,例如urllib,它允许您专注于您的代码。
之前 之后 要返回旧的行为,请在命令行上使用
--show-all
。 -
隐藏组的“入口”帧显示,以便您知道哪个调用是问题所在
-
组中的帧也显示得很慢,例如套接字的“读取”调用
-
应用程序代码在控制台中被突出显示
-
其他指标显示在跟踪的顶部 - 时间戳、样本数、持续时间、CPU时间
-
隐藏代码由
--hide
或--hide-regex
选项控制 - 匹配代码文件路径。--hide=EXPR glob-style pattern matching the file paths whose frames to hide. Defaults to '*/lib/*'. --hide-regex=REGEX regex matching the file paths whose frames to hide. Useful if --hide doesn't give enough control.
-
从命令行支持输出时间线。
-t, --timeline render as a timeline - preserve ordering and don't condense repeated calls
-
由于现在有几个渲染选项,您可以使用
--load-prev
加载之前的分析会话 - pyinstrument 保留最后 10 个会话。 -
隐藏的组也可以调用应用程序代码,如下所示
-
(内部) 记录时间线时,帧树现在是完全线性的,允许创建超级精确的帧图。
-
(内部) HTML 渲染器已被重写为一个 Vue.js 应用程序。所有控制台改进都适用于 HTML 输出,而且它是交互式的。
-
(内部) 添加了大量单元和集成测试!
哎呀!有关详细信息,请参阅 #49。希望您喜欢。
v2.3.0
- 大重构!
Recorders
已被移除。帧记录现在是Profiler
对象内部的。这意味着 'frame' 对象更通用,这为...铺平了道路。- 处理器!这些是会修改树以塑造输出的函数。它们由渲染器用于将输出过滤到正确的形式。现在,而不是时间聚合记录器,分析器只使用时间线式记录(这本身就是低开销的),聚合是在处理步骤中完成的。
- 结果是,现在可以很容易地修改树以过滤内容,并执行更高级的操作,如合并我们不关心的帧。v3.0 将会有更多使用此功能的特性!
- 移除了 Importlib 帧记录 - 您根本看不到它们。它们的子项被保留,因此导入是透明的。
- Django 配置文件名现在限制为一百个字符 (#50)
- 修复了 --html 选项的故障 (#53)
- 添加了
--version
命令行选项
v2.2.1
- 修复了在命令行中使用时崩溃的问题。
v2.2.0
-
添加了对 JSON 输出的支持。使用
pyinstrument --renderer=json scriptfile.py
。 PR -
@iddan 使用 JSON 输出创建了一个 交互式查看器!
-
当运行
pyinstrument --html
并没有将输出重定向到文件时,pyinstrument 将将控制台输出写入临时文件,并在浏览器中打开该文件。
v2.1.0
- 添加了对通过命令行使用 pyinstrument 运行模块的支持。新语法是
-m
标志,例如pyinstrument -m module_name
! PR
v2.0.4
- 修复了由于多线程使用 pyinstrument 而导致的崩溃。修复在 C 扩展中,请参阅 https://github.com/joerick/pyinstrument_cext/pull/3
v2.0.3
-
Pyinstrument 现在可以在
with
块中使用。例如
profiler = pyinstrument.Profiler() with profiler: # do some work here... print(profiler.output_text())
-
为旧版本的 Django 修复中间件
v2.0.2
- 修复了在分析具有大量堆栈帧的程序时发生的最大递归错误。
v2.0.1
- 确保在 sdist 中包含许可证。
v2.0.0
-
Pyinstrument 使用了一种新的分析模式。与使用信号不同,pyintrument 使用基于 PyEval_SetProfile 的新统计分析器。这意味着没有主线程限制,没有使用 Pyinstrument 时的 IO 错误,也不需要单独的 'setprofile' 模式!
-
渲染器。用户可以通过在
Profiler.output()
上的renderer
参数或使用命令行上的--renderer
参数自定义 Pyinstrument 以使用替代渲染器。 -
记录器。为了支持Pyinstrument的其它用例(例如火焰图),pyinstrument现在拥有“时间线”记录器模式。此模式以线性方式记录捕获的帧,因此可以按时间线查看程序执行。
v0.13
pyinstrument
命令。您现在可以通过在shell中运行$ pyinstrument script.py
来从shell中分析Python脚本。这现在等同于python -m pyinstrument
。感谢 @asmeurer!
v0.12
-
在HTML跟踪中突出显示应用程序代码,以便更容易找到。
-
向Django界面添加了
PYINSTRUMENT_PROFILE_DIR
选项,该选项将所有请求的配置文件记录到指定的文件夹中的文件。这对于分析API调用非常有用。 -
向Django界面添加了
PYINSTRUMENT_USE_SIGNAL
选项,当信号模式存在问题时应使用。
贡献
设置开发环境
virtualenv --python=python3 env
. env/bin/activate
pip install --upgrade pip
pip install -r requirements-dev.txt
pre-commit install --install-hooks
获取一些示例输出
pyinstrument examples/wikipedia_article_word_count.py
运行测试
pytest
在本地运行linting检查
pre-commit run --all-files
一些预提交检查,如 isort
或 black
,将自动修复它们发现的问题。因此,如果上面的命令返回错误,请再次运行它,它可能在第二次尝试时成功 :)
运行所有检查可能很慢,因此您也可以单独运行检查,例如,格式化失败的源代码 isort
或 black
检查。
pre-commit run --all-files isort
pre-commit run --all-files black
诊断为什么 pyright
检查失败
pre-commit run --all-files pyright
HTML渲染器Vue.js应用
HTML渲染器通过在HTML文件中嵌入带有JavaScript 'bundle'的样本的JSON表示来工作,该HTML文件可以在任何Web浏览器中查看。
要编辑HTML渲染器样式,请执行
cd html_renderer
npm ci
npm run serve
在没有顶级 window.profileSession
对象的情况下启动时,它将获取一个样本配置文件,以便您可以与之一起工作。
要编译JS应用程序并将其捆绑回pyinstrument Python工具
bin/build_js_bundle.py [--force]
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建版本
pyinstrument-4.7.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ad61041ff1880d4c99d3384cd267e38a0a6472b5a4dd765992db376bd4394c8 |
|
MD5 | 02c82bd8c8d951a1b39929ebc598c8a2 |
|
BLAKE2b-256 | dfffa899b0cb585f88a515703181b02488ba83c82a0df886d8eacb6921da6642 |
哈希值(pyinstrument-4.7.3-cp313-cp313-musllinux_1_2_x86_64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eaa45270af0b9d86f1cef705520e9b43f4a1cd18397083f8a594a28f898d078b |
|
MD5 | 791fab5641ba932a9defdbdbcc4749f9 |
|
BLAKE2b-256 | d9a8d87e440011cda09cb219feb5f0e848ad14635a26a962fe601b277e7ddd89 |
哈希值(pyinstrument-4.7.3-cp313-cp313-musllinux_1_2_i686.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8a66aee3d2cf0cc6b8e57cb189fd9fb16d13b8d538419999596ce4f58b5d4a9a |
|
MD5 | acccc036568053e61f27351580cfa5f5 |
|
BLAKE2b-256 | f9b0d80246d8dc2020f08dd836a483c1d7e7159d2abc6e5215c2908108562380 |
哈希值(pyinstrument-4.7.3-cp313-cp313-musllinux_1_2_aarch64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7f09ebad95af94f5427c20005fc7ba84a0a3deae6324434d7ec3be99d369bf37 |
|
MD5 | d4e0aed521a3ca3579e63eb39c9f7e63 |
|
BLAKE2b-256 | 5f4d1d3d03fff607b145b647c46ebe25d61adc689d0359378fc05181d4007287 |
哈希值(pyinstrument-4.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3d98997347047a217ef6b844273d3753e543e0984f2220e9dd284cbef6054c2a |
|
MD5 | f05a897a978f847088b735c37a868c54 |
|
BLAKE2b-256 | 76a814eeb9e33698fc47160210b225d0d2dff6b0d2fd21b0e59e378302c89b55 |
哈希值(pyinstrument-4.7.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d648596ea04409ca3ca260029041ed7fa046b776205bf9a0b75cda0a4f4d2515 |
|
MD5 | de4194b5aef2b834e1f95796186cdde0 |
|
BLAKE2b-256 | 5c3ce23cac0427bf422eba75e2157b3daea02a16d68eaad384f9c11dc4eda675 |
哈希值(pyinstrument-4.7.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 21e05f53810a6ff5fa261da838935fd1b2ab2bf30a7c053f6c72bcaaa6de0933 |
|
MD5 | fe20b6a9c2fb87c3069428f2cf181adb |
|
BLAKE2b-256 | 973904c6d79e8af80197125a5fc2c8485ce823e0f28aecd4302d55df0225b011 |
哈希值(pyinstrument-4.7.3-cp313-cp313-macosx_10_13_x86_64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 73da379506a09cdff2fdd23a0b3eb8f020f473d019f604538e0e5045613e33d4 |
|
MD5 | c8ca071c329737bec8e309bdf68e4a06 |
|
BLAKE2b-256 | 453397aa76dbb34af7d54aa007753615c0f1b5af876db7ce41ca7a6f51e4033a |
哈希值(pyinstrument-4.7.3-cp313-cp313-macosx_10_13_universal2.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6de792dc65dcc75e73b721f4e89aa60a4d2f8617e5a5da060244058018ad0399 |
|
MD5 | 9706d4175d56770e54184b1e081639e1 |
|
BLAKE2b-256 | b6965b9102380458702ce7ce5d09c625a25dc5d42cb243a89efb8273029ae6dc |
哈希值(pyinstrument-4.7.3-cp312-cp312-musllinux_1_2_x86_64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2092910e745cfd0a62dadf041afb38239195244871ee127b1028e7e790602e6b |
|
MD5 | 99de47b693f0c4e725102e926ce0c02f |
|
BLAKE2b-256 | 9744b234e50b35cda4f8405949f2d70d780ef2ce057a147ac45848997830116e |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 897d09c876f18b713498be21430b39428a9254ffec0c6c06796fce0e6a8fe437 |
|
MD5 | 2d8fce81ade16d011e5d93674686d547 |
|
BLAKE2b-256 | 96f8eb5366862a3523b59fc4c2a3b4d248d2c1e36dbbbd6f7a6b43ea3e0a4f45 |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d87749f68b9cc221628aab989a4a73b16030c27c714ecd83892d716f863d9739 |
|
MD5 | fefd74bb2cbb3ddc8bde9500d82a7a9e |
|
BLAKE2b-256 | 53ebf779ab14b87e2163aec08eb1a2d6da66c72c2bf0abc910d4b0070b90710b |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e23d5ad174d2a488c164abee4407f3f3a6e6d5721ab1fab9e0ad9570631704c2 |
|
MD5 | 1dae2e5f12d0ed52774ab0856b9fd139 |
|
BLAKE2b-256 | 40e767f74f224660fca73b132a178870003342b626fa9579f8a2fd77f2f5736f |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7e23ce5fcc30346e576b98ca24bd2a9a68cbc42b90cdb0d8f376fa82cee2fe23 |
|
MD5 | 7027863ad231390f84ef73a335c863b4 |
|
BLAKE2b-256 | bd7c42271ae6c70f22c57ff56239c9695ed5e4b34690767da0fce997c8b9b662 |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d564d6f6151d3cab28430092cdcbd4aefe0834551af4b4f97e6e57025a348557 |
|
MD5 | 8fc6d1d3401dcb541701176e33e7e2d2 |
|
BLAKE2b-256 | d6fd3edb6129d91be4d08af87a47091c52a114949305d710d6bc223e89226957 |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 84ceb25f24ceb03dc770b6c142ec4419506d3a04d66d778810cb8da76df25651 |
|
MD5 | 6474f76d3b483bd22937b91fa9a2817c |
|
BLAKE2b-256 | c04d87cf8287127f39274b979e11b7fc3a7520a433c03000db4f0e3c63da891f |
哈希值 用于 pyinstrument-4.7.3-cp312-cp312-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c29f7a23e0f704f5f21aeeb47193460601e7359d09156ea043395870494b39a |
|
MD5 | 07be543e0a9e42ae3b9094fcf2bf25a2 |
|
BLAKE2b-256 | 7fb5f8ccdad3fcb8a722a99c236a35eb32fb49962a74992a9c5086207c86491f |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61db15f8b59a3a1964041a8df260667fb5dabddd928301e3580cf93d7a05e352 |
|
MD5 | 250b2404eac34b4acd98bb3e8d850597 |
|
BLAKE2b-256 | 18f3de97a107634cccadc93b0e9b2adb577dc22b785b0f1dbbfbe63921dbf81b |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa2715e3ac3ce2f4b9c4e468a9a4faf43ca645beea002cb47533902576f4f64d |
|
MD5 | 446dc10115ee792a049a101ae8e148b8 |
|
BLAKE2b-256 | d4102bbd12bea2ab8bf6fdd06171710b3873776501abfb12d27750ccdc9d62df |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ae2c966c91da630a23dbff5f7e61ad2eee133cfaf1e4acf7e09fcf506cbb6251 |
|
MD5 | b566813791eb840d849863e3b2adab2e |
|
BLAKE2b-256 | 645c12f4b9aa37057ba832b81a0039abf75a0551ae75bf843efb6190becaca89 |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a7c481daec4bd77a3dbfbe01a0155e03352dd700f3c3efe4bdbc30821b20e19 |
|
MD5 | 8eba7cad0c8e898f2c3d3773575e717f |
|
BLAKE2b-256 | f2f63359e7b452955c36e285c24c357f784f2d963cd5247326c0435cd2917ade |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de40b44ff2fe78493b944b679cc084e72b2648c37a96fcfbccb9171a4449e509 |
|
MD5 | c2b28b198db4333af2c9d6e8cdf3689a |
|
BLAKE2b-256 | cd32884be2d9b1c27ffeaceb1f8a4d36b9cb97f2ddd40da4af487d254acfdb1f |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b1321514863be18138a6d761696b3f6e8645390dd2f6c8a6d66a453f0d5187c |
|
MD5 | 3389c5e50865dbb5f30f2dca1138b8cf |
|
BLAKE2b-256 | bb90dde09a02620335cf6969823022904293f2c2288dd436aa4b10dd3d26738b |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 70afa765c06e4f7605033b85ef82ed946ec8e6ae1835e25f6cbb01205a624197 |
|
MD5 | 6671d539b95202c9069bfa0a7e1a4130 |
|
BLAKE2b-256 | 695821d86b4d545149a9a9ef3bd3166917b9a329f5f4521632fdbe047ab45caf |
哈希值 用于 pyinstrument-4.7.3-cp311-cp311-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77594adf4713bc3e430e300561a2d837213cf9015414c0e0de6aef0cb9cebd80 |
|
MD5 | 1d2229be261bda739db3c929e1ff39f5 |
|
BLAKE2b-256 | 96f184bfbcf6dab75c93d1b9e7437ef22305a13ba0f96060af454a80a05d0f89 |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c5fbe9d24154a118a4b86bed5ae228c3d8698216fad65257aca97e790527197a |
|
MD5 | 08bf08ac34b6d0f4e633d804ff22e329 |
|
BLAKE2b-256 | f9121b1d7c5a468bbfa07aab7822423e4e9249490c9454133bf8921ff0b775da |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9b4d80deaf76cc171b3b707e2babc9a7046610c4e11022167949e60fc2dc62be |
|
MD5 | 47fa732794534b91446c1ed50d0c586a |
|
BLAKE2b-256 | 4d07441d26d50e50b6ab0a183f47eade5c03b6a283008dc52fd9b3af47be120c |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c619f3064dae5284b904c4862b35639c35ecd439bb5b4152924f7ccb69edc5e3 |
|
MD5 | 4253758caa319051c0e900a54467ff24 |
|
BLAKE2b-256 | 7a34d8c3769ce8dfafccac2b03d6abbf751f39f7fafcb04215cfab52acbed47c |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8d1f4e0155f563f66e821210c225af8b64a2283c0feff776c49feba623e7bafd |
|
MD5 | 567808b86ffbe9c65e643148d18f376f |
|
BLAKE2b-256 | 432086e66e4e83c0f81cb54e50edb8d94c72eac6bcc7ea1fdd86ace30aa1ef74 |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9402e339d802a7f5b1ad716b8411ab98f45e51c4b261e662b8a470c251af0acc |
|
MD5 | be2cef457bec69e9c0a7ce9c0f66610a |
|
BLAKE2b-256 | e8aec83d4d99dd1b71fe4229ea0ebb558cf607b39e9bdda146bb11f53f57a733 |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f65107079f68dcaeb58ee032d98075ab7ac49be419c60673406043e0675393b4 |
|
MD5 | 289697a0badc17ce6dc5535b91a6ebcb |
|
BLAKE2b-256 | 5dc335723bb261f5c3409a1b2a5f9fb042c9cdf4a9389988c2c1f30c60a94673 |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 089f7afb326ee937656ee1767813dc793ad20b3d353d081e16255b63830a4787 |
|
MD5 | 3c95e89078f324205e0755fbda31c273 |
|
BLAKE2b-256 | 31241f48e51593dab645fbc1505728aa486f63d31b79fd0f0ba3bbeb50eea2bf |
哈希值 用于 pyinstrument-4.7.3-cp310-cp310-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a79912f8a096ccad1b88a527719563f6b2b5dc94057873c2ca840dc6378cfee |
|
MD5 | c7753bf89a37f3196cc082a980d798c2 |
|
BLAKE2b-256 | c1784e327769c42345c8200aef15130168fd534f9120531b450baa2345a7bbd5 |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 886ccb349aefcbd5be1f33247b3a1af4ad5d34939338d99e94bae064886bf0d8 |
|
MD5 | a16261ada5ab9f0ae3b49f0b9ea9e623 |
|
BLAKE2b-256 | 3fd7cd61ed0c871cf31706e5cd78ce4441b90690891cc93bac8f471fe93e85b9 |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e660d9a7f57909574010056dbc80869866623669455516ffc7421988286ddaf3 |
|
MD5 | 12f78b6ae2c8b1a2a1c5bc979d793965 |
|
BLAKE2b-256 | 09d98a1cbe0d8b51c708902630818bdc546d20ee36b81ad9f724e77e5617b632 |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b312442f01fbf2582cd7c929703608cb82874b73a0f3250cbeffc4abddae4f5 |
|
MD5 | c0ba983de3d0652f61d0bf38935c9665 |
|
BLAKE2b-256 | b06a601b4f640e66890633001af8230efe7763f23d30677d1eabae3d607054b9 |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 03dd0c51f6ca706be5c27715e9b4527aa82003c2705d3173943c5b4a2b7a47e8 |
|
MD5 | 8c2f93dbb128eb81bc771719471ddff4 |
|
BLAKE2b-256 | 3fdb94dee77c64998f80c1f13640588b50119370674892ff8bbcc195b47b63da |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 98e1b7695c234786e82500394ef50f205713f8702a31aec84fdd0687e0ab8405 |
|
MD5 | 1c31e63f4e2047b0dd53e3c055438e27 |
|
BLAKE2b-256 | 0bc3a5720d0140d20bea78e3ecdc05933a587862ee2ff5498fc6c20078b4423e |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e381fc56ba4a77cb45d82eb69689d900a5ee7205a5eb90131234b21ae7a1991 |
|
MD5 | 9c9da04626bd9f63a26b578c3a5effc8 |
|
BLAKE2b-256 | e17fc0bf8993bf965394a6c8356ec8e663f0d9e6e96ac93e9b4319a03afabc83 |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | edd85ee9c6aa5be0bf78d48ad2eb5e02fdab1a646875d90fa09cbc61f4c91a01 |
|
MD5 | e4f1da3cf616a49bd7deea3cb6d4434e |
|
BLAKE2b-256 | 906dea77d5b70494bf2f1de309b8e126e0b8b6d7c0c8229e0e8e9117d201b1fe |
哈希值 用于 pyinstrument-4.7.3-cp39-cp39-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8b944c939c49af88cec1e20e9c28eec80c478fc2fd53b23ed58702bcb5bcbcf9 |
|
MD5 | ca8173196f80e4dd7591d8497f723cfb |
|
BLAKE2b-256 | e79e4a361ba48920c47bd5f1cb06e8812ad3152a875be4504bc332eae98d0592 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 346bc584c542c4c77ca46e8f55eb2d3265ee992839e06d535a22ca65c5b9e767 |
|
MD5 | a884fd9cdba70e1e8161831e5924b9c8 |
|
BLAKE2b-256 | 98a7e5ddccdba03b0ac48dddfe50750ca8e4752d54b2c7ffe41dbd7406b65c06 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6d642d8c69091fd49286136b7d958f8dbac969a3f6259c7c6d78e8ff207d235e |
|
MD5 | 585bcc58b535d919c7dd6b8625700e42 |
|
BLAKE2b-256 | b5f41e9034db9572383332a48aa1d949470baad95fcdf0a72b398d8c213c6691 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-musllinux_1_2_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f29ed5778b83bf40bd808f120cd2ea11ef94acd2aa5b64398e6d56958b88ab26 |
|
MD5 | 17f86911375448941ff72e6de6ca159a |
|
BLAKE2b-256 | 69cf38c337617214ebae4fa56c364dd1b339c8e61425275a81f981e5e4865b63 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 470a4f6de1a1edf7debe87917b5d12f94fe59975a8a0e91c22ad789b55720073 |
|
MD5 | 134b126a85b38b928223454aebd9a319 |
|
BLAKE2b-256 | adb83b57d0427a51e1a78a9c11a2dc294bd166d28360cc162416ba0145df47bf |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 65fd559498902d1560d728238eea53d8dd54cb8f697b816cacce5524f09d8757 |
|
MD5 | 7750a3d7204d343dc625ee0c69e4a519 |
|
BLAKE2b-256 | 562a3e3deae8080714a99f090417a91b1dee44bca2ae2081bf21f35890d0f489 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bfad987207c89b51f80be71f5362cead4ccd62b9f407248b87e91863bba70e4d |
|
MD5 | 2e084cee4b1d5dfd776a946dce866cdb |
|
BLAKE2b-256 | 5db6432ca55523b6c950fb4f31438a4e0987e83d705963563bad0a1432aea908 |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | df9ba133f5a771dd30df1d3b868af75bdb7f12c9ebd5ddd463d09aa6334d96ef |
|
MD5 | 75a34af3316676c8780bde4b0d8edb55 |
|
BLAKE2b-256 | 60ad8d3a8fa7a5340ee19952cf6a819ceec6165ceabc035a7b0ad9d94601f04c |
哈希值 用于 pyinstrument-4.7.3-cp38-cp38-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b68c5b97690604741bb1f028ec75d2a6298500f415590ae92a766f71b82fc72a |
|
MD5 | d6f41db5d211f4ba4498f540bd9b2410 |
|
BLAKE2b-256 | 92431ee726da1183932b042c8fb3c6b1a2521c841b34f097f46835f08afbd982 |