--- /srv/rebuilderd/tmp/rebuilderdtGpqAF/inputs/python3-pyinstrument_5.1.1+ds-1+b1_arm64.deb +++ /srv/rebuilderd/tmp/rebuilderdtGpqAF/out/python3-pyinstrument_5.1.1+ds-1+b1_arm64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-12-03 20:00:57.000000 debian-binary │ -rw-r--r-- 0 0 0 3308 2025-12-03 20:00:57.000000 control.tar.xz │ --rw-r--r-- 0 0 0 110556 2025-12-03 20:00:57.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 109544 2025-12-03 20:00:57.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./control │ │ │ @@ -1,13 +1,13 @@ │ │ │ Package: python3-pyinstrument │ │ │ Source: python-pyinstrument (5.1.1+ds-1) │ │ │ Version: 5.1.1+ds-1+b1 │ │ │ Architecture: arm64 │ │ │ Maintainer: Debian Python Team │ │ │ -Installed-Size: 564 │ │ │ +Installed-Size: 563 │ │ │ Depends: python3 (<< 3.15), python3 (>= 3.13~), python3:any, libc6 (>= 2.17) │ │ │ Suggests: python-pyinstrument-doc │ │ │ Section: python │ │ │ Priority: optional │ │ │ Homepage: https://github.com/joerick/pyinstrument │ │ │ Description: Call stack profiler for Python with colored output │ │ │ Pyinstrument is a Python profiler. A profiler is a tool to help you optimize │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -93,8 +93,8 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 1022 2025-08-12 11:21:24.000000 ./usr/share/doc/python3-pyinstrument/examples/falcon_hello_file.py │ │ │ -rw-r--r-- 0 root (0) root (0) 889 2025-08-12 11:21:24.000000 ./usr/share/doc/python3-pyinstrument/examples/flask_hello.py │ │ │ -rw-r--r-- 0 root (0) root (0) 1485 2025-08-12 11:21:24.000000 ./usr/share/doc/python3-pyinstrument/examples/litestar_hello.py │ │ │ -rw-r--r-- 0 root (0) root (0) 308 2025-08-12 11:21:24.000000 ./usr/share/doc/python3-pyinstrument/examples/np_c_function.py │ │ │ -rw-r--r-- 0 root (0) root (0) 224 2025-08-12 11:21:24.000000 ./usr/share/doc/python3-pyinstrument/examples/tbhide_demo.py │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-12-03 20:00:57.000000 ./usr/share/man/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-12-03 20:00:57.000000 ./usr/share/man/man1/ │ │ │ --rw-r--r-- 0 root (0) root (0) 13558 2025-12-03 20:00:57.000000 ./usr/share/man/man1/pyinstrument.1.gz │ │ │ +-rw-r--r-- 0 root (0) root (0) 12546 2025-12-03 20:00:57.000000 ./usr/share/man/man1/pyinstrument.1.gz │ │ ├── ./usr/share/man/man1/pyinstrument.1.gz │ │ │ ├── pyinstrument.1 │ │ │ │ @@ -68,74 +68,29 @@ │ │ │ │ colored summary showing where most of the time was spent. │ │ │ │ .sp │ │ │ │ Here are the options you can use: │ │ │ │ .INDENT 0.0 │ │ │ │ .INDENT 3.5 │ │ │ │ .sp │ │ │ │ .EX │ │ │ │ -Usage: pyinstrument [options] scriptfile [arg] ... │ │ │ │ - │ │ │ │ -Options: │ │ │ │ - \-\-version show program\(aqs version number and exit │ │ │ │ - \-h, \-\-help show this help message and exit │ │ │ │ - \-\-load=FILENAME instead of running a script, load a profile session │ │ │ │ - from a pyisession file │ │ │ │ - \-\-load\-prev=IDENTIFIER │ │ │ │ - instead of running a script, load a previous profile │ │ │ │ - session as specified by an identifier │ │ │ │ - \-m MODULE run library module as a script, like \(aqpython \-m │ │ │ │ - module\(aq │ │ │ │ - \-c PROGRAM program passed in as string, like \(aqpython \-c \(dq...\(dq\(aq │ │ │ │ - \-\-from\-path (POSIX only) instead of the working directory, look │ │ │ │ - for scriptfile in the PATH environment variable │ │ │ │ - \-o OUTFILE, \-\-outfile=OUTFILE │ │ │ │ - save to │ │ │ │ - \-r RENDERER, \-\-renderer=RENDERER │ │ │ │ - how the report should be rendered. One of: \(aqtext\(aq, │ │ │ │ - \(aqhtml\(aq, \(aqjson\(aq, \(aqspeedscope\(aq, \(aqpyisession\(aq, \(aqpstats\(aq, │ │ │ │ - or python import path to a renderer class. Defaults to │ │ │ │ - the appropriate format for the extension if OUTFILE is │ │ │ │ - given, otherwise, defaults to \(aqtext\(aq. │ │ │ │ - \-p RENDER_OPTION, \-\-render\-option=RENDER_OPTION │ │ │ │ - options to pass to the renderer, in the format │ │ │ │ - \(aqflag_name\(aq or \(aqoption_name=option_value\(aq. For │ │ │ │ - example, to set the option \(aqtime\(aq, pass \(aq\-p │ │ │ │ - time=percent_of_total\(aq. To pass multiple options, use │ │ │ │ - the \-p option multiple times. You can set processor │ │ │ │ - options using dot\-syntax, like \(aq\-p │ │ │ │ - processor_options.filter_threshold=0\(aq. option_value is │ │ │ │ - parsed as a JSON value or a string. │ │ │ │ - \-t, \-\-timeline render as a timeline \- preserve ordering and don\(aqt │ │ │ │ - condense repeated calls │ │ │ │ - \-\-hide=EXPR glob\-style pattern matching the file paths whose │ │ │ │ - frames to hide. Defaults to hiding non\-application │ │ │ │ - code │ │ │ │ - \-\-hide\-regex=REGEX regex matching the file paths whose frames to hide. │ │ │ │ - Useful if \-\-hide doesn\(aqt give enough control. │ │ │ │ - \-\-show=EXPR glob\-style pattern matching the file paths whose │ │ │ │ - frames to show, regardless of \-\-hide or \-\-hide\-regex. │ │ │ │ - For example, use \-\-show \(aq*//*\(aq to show frames │ │ │ │ - within a library that would otherwise be hidden. │ │ │ │ - \-\-show\-regex=REGEX regex matching the file paths whose frames to always │ │ │ │ - show. Useful if \-\-show doesn\(aqt give enough control. │ │ │ │ - \-\-show\-all show everything │ │ │ │ - \-\-unicode (text renderer only) force unicode text output │ │ │ │ - \-\-no\-unicode (text renderer only) force ascii text output │ │ │ │ - \-\-color (text renderer only) force ansi color text output │ │ │ │ - \-\-no\-color (text renderer only) force no color text output │ │ │ │ - \-i INTERVAL, \-\-interval=INTERVAL │ │ │ │ - Minimum time, in seconds, between each stack sample. │ │ │ │ - Smaller values allow resolving shorter duration │ │ │ │ - function calls but incur a greater runtime and memory │ │ │ │ - consumption overhead. For longer running scripts, │ │ │ │ - setting a larger interval reduces the memory │ │ │ │ - consumption required to store the stack samples. │ │ │ │ - \-\-use\-timing\-thread Use a separate thread to time the interval between │ │ │ │ - stack samples. This can reduce the overhead of │ │ │ │ - sampling on some systems. │ │ │ │ +Traceback (most recent call last): │ │ │ │ + File \(dq\(dq, line 189, in _run_module_as_main │ │ │ │ + File \(dq\(dq, line 148, in _get_module_details │ │ │ │ + File \(dq\(dq, line 112, in _get_module_details │ │ │ │ + File \(dq/build/reproducible\-path/python\-pyinstrument\-5.1.1+ds/.pybuild/cpython3_3.14_pyinstrument/build/pyinstrument/__init__.py\(dq, line 3, in │ │ │ │ + from pyinstrument.context_manager import profile │ │ │ │ + File \(dq/build/reproducible\-path/python\-pyinstrument\-5.1.1+ds/.pybuild/cpython3_3.14_pyinstrument/build/pyinstrument/context_manager.py\(dq, line 8, in │ │ │ │ + from pyinstrument.profiler import AsyncMode, Profiler │ │ │ │ + File \(dq/build/reproducible\-path/python\-pyinstrument\-5.1.1+ds/.pybuild/cpython3_3.14_pyinstrument/build/pyinstrument/profiler.py\(dq, line 16, in │ │ │ │ + from pyinstrument.stack_sampler import AsyncState, StackSampler, build_call_stack, get_stack_sampler │ │ │ │ + File \(dq/build/reproducible\-path/python\-pyinstrument\-5.1.1+ds/.pybuild/cpython3_3.14_pyinstrument/build/pyinstrument/stack_sampler.py\(dq, line 12, in │ │ │ │ + from pyinstrument.low_level.stat_profile import ( │ │ │ │ + ...<4 lines>... │ │ │ │ + ) │ │ │ │ +ModuleNotFoundError: No module named \(aqpyinstrument.low_level.stat_profile\(aq │ │ │ │ .EE │ │ │ │ .UNINDENT │ │ │ │ .UNINDENT │ │ │ │ .sp │ │ │ │ \fBProtip:\fP \fB\-r html\fP will give you a interactive profile report as HTML \- you │ │ │ │ can really explore this way! │ │ │ │ .SS Profile a Python CLI command │ │ │ │ @@ -214,17 +169,17 @@ │ │ │ │ .UNINDENT │ │ │ │ .UNINDENT │ │ │ │ .sp │ │ │ │ Experiment with the interval value to see different depths, but keep in mind │ │ │ │ that smaller intervals could affect the performance overhead of profiling. │ │ │ │ .sp │ │ │ │ \fBProtip:\fP To explore the profile in a web browser, use │ │ │ │ -\fBprofiler.open_in_browser()\fP \%<#\:pyinstrument\:.Profiler\:.open_in_browser>\&. To │ │ │ │ +\fBprofiler.open_in_browser()\fP\&. To │ │ │ │ save this HTML for later, use │ │ │ │ -\fBprofiler.output_html()\fP \%<#\:pyinstrument\:.Profiler\:.output_html>\&. │ │ │ │ +\fBprofiler.output_html()\fP\&. │ │ │ │ .SS Profile code in Jupyter/IPython │ │ │ │ .sp │ │ │ │ Via IPython magics \%, │ │ │ │ you can profile a line or a cell in IPython or Jupyter. │ │ │ │ .sp │ │ │ │ Example: │ │ │ │ .INDENT 0.0 │ │ │ │ @@ -756,15 +711,15 @@ │ │ │ │ be in your program, but you should still be able to find why it\(aqs slow. │ │ │ │ .SS Async profiling │ │ │ │ .sp │ │ │ │ pyinstrument can profile async programs that use \fBasync\fP and \fBawait\fP\&. This │ │ │ │ async support works by tracking the \(aqcontext\(aq of execution, as provided by the │ │ │ │ built\-in contextvars \% module. │ │ │ │ .sp │ │ │ │ -When you start a Profiler with the \fBasync_mode\fP \%<#\:pyinstrument\:.Profiler\:.async_mode> \fBenabled\fP or \fBstrict\fP (not \fBdisabled\fP), that Profiler is attached to the current async context. │ │ │ │ +When you start a Profiler with the \fBasync_mode\fP \fBenabled\fP or \fBstrict\fP (not \fBdisabled\fP), that Profiler is attached to the current async context. │ │ │ │ .sp │ │ │ │ When profiling, pyinstrument keeps an eye on the context. When execution exits │ │ │ │ the context, it captures the \fBawait\fP stack that caused the context to exit. │ │ │ │ Any time spent outside the context is attributed to the that halted execution │ │ │ │ of the \fBawait\fP\&. │ │ │ │ .sp │ │ │ │ Async contexts are inherited, so tasks started when a profiler is active are │ │ │ │ @@ -923,191 +878,14 @@ │ │ │ │ Creates a context\-manager or function decorator object, which profiles the given code and prints the output to stdout. │ │ │ │ .sp │ │ │ │ The \fIinterval\fP, \fIasync_mode\fP and \fIuse_timing_thread\fP parameters are passed through to the underlying \fBpyinstrument.Profiler\fP object. │ │ │ │ .sp │ │ │ │ You can pass a renderer to customise the output. By default, it uses a \fBConsoleRenderer\fP with \fIshort_mode\fP set. │ │ │ │ .UNINDENT │ │ │ │ .SS The Profiler object │ │ │ │ -.INDENT 0.0 │ │ │ │ -.TP │ │ │ │ -.B class pyinstrument.Profiler(interval=0.001, async_mode=\(aqenabled\(aq, use_timing_thread=None) │ │ │ │ -The profiler \- this is the main way to use pyinstrument. │ │ │ │ -.sp │ │ │ │ -Note the profiling will not start until \fBstart()\fP is called. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B Parameters │ │ │ │ -.INDENT 7.0 │ │ │ │ -.IP \(bu 2 │ │ │ │ -\fBinterval\fP (\fIfloat\fP) \-\- See \fBinterval\fP\&. │ │ │ │ -.IP \(bu 2 │ │ │ │ -\fBasync_mode\fP (\fIAsyncMode\fP) \-\- See \fBasync_mode\fP\&. │ │ │ │ -.IP \(bu 2 │ │ │ │ -\fBuse_timing_thread\fP (\fIbool\fP\fI | \fP\fINone\fP) \-\- If True, the profiler will use a separate │ │ │ │ -thread to keep track of time. This is useful if you\(aqre on a system │ │ │ │ -where getting the time has significant overhead. │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B property interval: float │ │ │ │ -The minimum time, in seconds, between each stack sample. This translates into the │ │ │ │ -resolution of the sampling. │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B property async_mode: str │ │ │ │ -Configures how this Profiler tracks time in a program that uses │ │ │ │ -async/await. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B \fBenabled\fP │ │ │ │ -When this profiler sees an \fBawait\fP, time is logged in the function │ │ │ │ -that awaited, rather than observing other coroutines or the event │ │ │ │ -loop. │ │ │ │ -.TP │ │ │ │ -.B \fBdisabled\fP │ │ │ │ -This profiler doesn\(aqt attempt to track \fBawait\fP\&. In a program that │ │ │ │ -uses async/await, this will interleave other coroutines and event │ │ │ │ -loop machinery in the profile. Use this option if async support is │ │ │ │ -causing issues in your use case, or if you want to run multiple │ │ │ │ -profilers at once. │ │ │ │ -.TP │ │ │ │ -.B \fBstrict\fP │ │ │ │ -Instructs the profiler to only profile the current │ │ │ │ -async context \%\&. │ │ │ │ -Frames that are observed in an other context are ignored, tracked │ │ │ │ -instead as \fB\fP\&. │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B property last_session: Session \%<#\:pyinstrument\:.session\:.Session> | None │ │ │ │ -The previous session recorded by the Profiler. │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B start(caller_frame=None, target_description=None) │ │ │ │ -Instructs the profiler to start \- to begin observing the program\(aqs execution and recording │ │ │ │ -frames. │ │ │ │ -.sp │ │ │ │ -The normal way to invoke \fBstart()\fP is with a new instance, but you can restart a Profiler │ │ │ │ -that was previously running, too. The sessions are combined. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B Parameters │ │ │ │ -\fBcaller_frame\fP (\fIFrameType\fP\fI | \fP\fINone\fP) \-\- │ │ │ │ -.sp │ │ │ │ -Set this to override the default behaviour of treating the caller of │ │ │ │ -\fBstart()\fP as the \(aqstart_call_stack\(aq \- the instigator of the profile. Most │ │ │ │ -renderers will trim the \(aqroot\(aq from the call stack up to this frame, to │ │ │ │ -present a simpler output. │ │ │ │ -.sp │ │ │ │ -You might want to set this to \fBinspect.currentframe().f_back\fP if you are │ │ │ │ -writing a library that wraps pyinstrument. │ │ │ │ - │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B stop() │ │ │ │ -Stops the profiler observing, and sets \fBlast_session\fP │ │ │ │ -to the captured session. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B Returns │ │ │ │ -The captured session. │ │ │ │ -.TP │ │ │ │ -.B Return type │ │ │ │ -\fISession\fP \%<#\:pyinstrument\:.session\:.Session> │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B property is_running │ │ │ │ -Returns \fITrue\fP if this profiler is running \- i.e. observing the program execution. │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B reset() │ │ │ │ -Resets the Profiler, clearing the \fIlast_session\fP\&. │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B __enter__() │ │ │ │ -Context manager support. │ │ │ │ -.sp │ │ │ │ -Profilers can be used in \fIwith\fP blocks! See this example: │ │ │ │ -.INDENT 7.0 │ │ │ │ -.INDENT 3.5 │ │ │ │ -.sp │ │ │ │ -.EX │ │ │ │ -with Profiler() as p: │ │ │ │ - # your code here... │ │ │ │ - do_some_work() │ │ │ │ - │ │ │ │ -# profiling has ended. let\(aqs print the output. │ │ │ │ -p.print() │ │ │ │ -.EE │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B print(file=sys.stdout, *, unicode=None, color=None, show_all=False, timeline=False, time=\(aqseconds\(aq, flat=False, flat_time=\(aqself\(aq, short_mode=False, processor_options=None) │ │ │ │ -Print the captured profile to the console, as rendered by \fBrenderers.ConsoleRenderer\fP │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B Parameters │ │ │ │ -\fBfile\fP (\fIIO\fP\fI[\fP\fIstr\fP\fI]\fP) \-\- the IO stream to write to. Could be a file descriptor or sys.stdout, sys.stderr. Defaults to sys.stdout. │ │ │ │ -.UNINDENT │ │ │ │ -.sp │ │ │ │ -See \fBrenderers.ConsoleRenderer\fP for the other parameters. │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B output_text(unicode=False, color=False, show_all=False, timeline=False, time=\(aqseconds\(aq, flat=False, flat_time=\(aqself\(aq, short_mode=False, processor_options=None) │ │ │ │ -Return the profile output as text, as rendered by \fBConsoleRenderer\fP │ │ │ │ -.sp │ │ │ │ -See \fBrenderers.ConsoleRenderer\fP for parameter description. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B output_html() │ │ │ │ -Return the profile output as HTML, as rendered by \fBHTMLRenderer\fP │ │ │ │ -.INDENT 7.0 │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B write_html(path, timeline=False, show_all=False) │ │ │ │ -Writes the profile output as HTML to a file, as rendered by \fBHTMLRenderer\fP │ │ │ │ -.INDENT 7.0 │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B open_in_browser(timeline=False) │ │ │ │ -Opens the last profile session in your web browser. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B output(renderer) │ │ │ │ -Returns the last profile session, as rendered by \fBrenderer\fP\&. │ │ │ │ -.INDENT 7.0 │ │ │ │ -.TP │ │ │ │ -.B Parameters │ │ │ │ -\fBrenderer\fP (\fIRenderer\fP) \-\- The renderer to use. │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ -.UNINDENT │ │ │ │ .SS Sessions │ │ │ │ .INDENT 0.0 │ │ │ │ .TP │ │ │ │ .B class pyinstrument.session.Session │ │ │ │ Represents a profile session, contains the data collected during a profile session. │ │ │ │ .INDENT 7.0 │ │ │ │ .UNINDENT