Functions exported with PyAPI_FUNC():
Python | Public | Private | Internal | Total |
---|---|---|---|---|
2.7.0 | 738 | 159 | 0 | 897 |
3.6.0 | 844 (+106) | 382 (+223) | 0 (same) | 1,226 (+329) |
3.7.0 | 869 (+25) | 450 (+68) | 16 (+16) | 1,335 (+109) |
3.8.0 | 909 (+40) | 429 (-21) | 83 (+67) | 1,421 (+86) |
3.9.0 | 919 (+10) | 412 (-17) | 114 (+31) | 1,445 (+24) |
3.10.0 | 885 (-34) | 412 (same) | 120 (+6) | 1,417 (-28) |
3.11.0 | 891 (+6) | 360 (-52) | 181 (+61) | 1,432 (+15) |
3.12.0 | 929 (+38) | 389 (+29) | 179 (-2) | 1,497 (+65) |
3.13 (dev) | 979 (+50) | 126 (-263) | 329 (+150) | 1,434 (-63) |
main (3.14) | 1,022 (+43) | 125 (-1) | 339 (+10) | 1,486 (+52) |
Since Python 3.9, Python is now built with -fvisibility=hidden
to avoid
exporting symbols which are not explicitly exported.
The make smelly
command checks for public symbols of libpython and C
extension which are prefixed by Py
or _Py
. See
the Tools/scripts/smelly.py
script.
Symbols exported with PyAPI_DATA():
Python | Public | Private | Internal | Total |
---|---|---|---|---|
2.7.0 | 129 | 30 | 0 | 159 |
3.6.0 | 167 (+38) | 42 (+12) | 0 (same) | 209 (+50) |
3.7.0 | 170 (+3) | 35 (-7) | 9 (+9) | 214 (+5) |
3.8.0 | 174 (+4) | 37 (+2) | 12 (+3) | 223 (+9) |
3.9.0 | 173 (-1) | 35 (-2) | 14 (+2) | 222 (-1) |
3.10.0 | 173 (same) | 33 (-2) | 13 (-1) | 219 (-3) |
3.11.0 | 177 (+4) | 32 (-1) | 10 (-3) | 219 (same) |
3.12.0 | 176 (-1) | 30 (-2) | 11 (+1) | 217 (-2) |
3.13 (dev) | 180 (+4) | 14 (-16) | 25 (+14) | 219 (+2) |
main (3.14) | 180 (same) | 14 (same) | 27 (+2) | 221 (+2) |
Number of C API line numbers per Python version:
Python | Limited API | CPython API | Internal API | Total |
---|---|---|---|---|
2.7.0 | 12,392 (100%) | 0 (0%) | 0 (0%) | 12,392 |
3.6.0 | 15,330 (100%) | 0 (0%) | 0 (0%) | 15,330 |
3.7.0 | 15,943 (96%) | 0 (0%) | 703 (4%) | 16,646 |
3.8.0 | 12,648 (69%) | 3,418 (19%) | 2,241 (12%) | 18,307 |
3.9.0 | 11,744 (61%) | 4,359 (23%) | 3,118 (16%) | 19,221 |
3.10.0 | 9,909 (49%) | 4,584 (23%) | 5,553 (28%) | 20,046 |
3.11.0 | 8,733 (36%) | 5,407 (22%) | 10,079 (42%) | 24,219 |
3.12.0 | 9,012 (28%) | 5,836 (18%) | 17,650 (54%) | 32,498 |
3.13 (dev) | 9,097 (21%) | 8,316 (19%) | 26,897 (61%) | 44,310 |
main (3.14) | 9,181 (20%) | 8,401 (18%) | 27,860 (61%) | 45,442 |
Number of header file numbers per Python version:
Python | Limited API | CPython API | Internal API | Total |
---|---|---|---|---|
2.7.0 | 91 | 0 | 0 | 91 |
3.6.0 | 98 (+7) | 0 (same) | 0 (same) | 98 (+7) |
3.7.0 | 98 (same) | 0 (same) | 12 (+12) | 110 (+12) |
3.8.0 | 96 (-2) | 15 (+15) | 22 (+10) | 133 (+23) |
3.9.0 | 97 (+1) | 24 (+9) | 34 (+12) | 155 (+22) |
3.10.0 | 80 (-17) | 32 (+8) | 49 (+15) | 161 (+6) |
3.11.0 | 71 (-9) | 47 (+15) | 69 (+20) | 187 (+26) |
3.12.0 | 71 (same) | 49 (+2) | 91 (+22) | 211 (+24) |
3.13 (dev) | 74 (+3) | 57 (+8) | 123 (+32) | 254 (+43) |
main (3.14) | 75 (+1) | 57 (same) | 126 (+3) | 258 (+4) |
Public functions defined as macros and static inline functions:
Python | Macro | Static inline | Total |
---|---|---|---|
2.7.0 | 274 | 0 | 274 |
3.6.0 | 306 (+32) | 0 (same) | 306 (+32) |
3.7.0 | 315 (+9) | 0 (same) | 315 (+9) |
3.8.0 | 314 (-1) | 0 (same) | 314 (-1) |
3.9.0 | 307 (-7) | 0 (same) | 307 (-7) |
3.10.0 | 307 (same) | 0 (same) | 307 (same) |
3.11.0 | 269 (-38) | 42 (+42) | 311 (+4) |
3.12.0 | 251 (-18) | 64 (+22) | 315 (+4) |
3.13 (dev) | 249 (-2) | 63 (-1) | 312 (-3) |
main (3.14) | 250 (+1) | 62 (-1) | 312 (same) |
Only count public macros and public static inline functions (names starting with "Py" or "PY").
Private functions defined as macros and static inline functions:
Python | Macro | Static inline | Total |
---|---|---|---|
2.7.0 | 21 | 0 | 21 |
3.6.0 | 60 (+39) | 0 (same) | 60 (+39) |
3.7.0 | 70 (+10) | 0 (same) | 70 (+10) |
3.8.0 | 57 (-13) | 7 (+7) | 64 (-6) |
3.9.0 | 43 (-14) | 11 (+4) | 54 (-10) |
3.10.0 | 44 (+1) | 18 (+7) | 62 (+8) |
3.11.0 | 53 (+9) | 4 (-14) | 57 (-5) |
3.12.0 | 62 (+9) | 7 (+3) | 69 (+12) |
3.13 (dev) | 55 (-7) | 10 (+3) | 65 (-4) |
main (3.14) | 55 (same) | 10 (same) | 65 (same) |
Only count private macros and public static inline functions (ignore names starting with "Py" or "PY").
Structures in the Python C API:
Python | Limited API | CPython API | Internal API | Total |
---|---|---|---|---|
2.7.0 | 91 | 0 | 0 | 91 |
3.6.0 | 109 (+18) | 0 (same) | 0 (same) | 109 (+18) |
3.7.0 | 114 (+5) | 0 (same) | 18 (+18) | 132 (+23) |
3.8.0 | 81 (-33) | 34 (+34) | 28 (+10) | 143 (+11) |
3.9.0 | 68 (-13) | 46 (+12) | 38 (+10) | 152 (+9) |
3.10.0 | 41 (-27) | 53 (+7) | 91 (+53) | 185 (+33) |
3.11.0 | 19 (-22) | 75 (+22) | 112 (+21) | 206 (+21) |
3.12.0 | 18 (-1) | 85 (+10) | 170 (+58) | 273 (+67) |
3.13 (dev) | 16 (-2) | 86 (+1) | 232 (+62) | 334 (+61) |
main (3.14) | 16 (same) | 83 (-3) | 230 (-2) | 329 (-5) |
Count also private structures like "_PyCFrame" and structures with names not starting with Py like "_frozen".