Commit d4c151d
authored
feat: require Python 3.10 and automate version reviews (openai#3537)
## Summary
- raise the minimum supported runtime from Python 3.9 to Python 3.10
- codify the SDK's Python-version and SemVer policy
- test the minimum/current runtimes on normal CI and the full supported
matrix on a schedule
- add a monthly, least-privilege Codex assessment that opens or
refreshes an advisory issue when lifecycle, usage, or repository drift
needs maintainer action
- validate built metadata and prove that pip on Python 3.9 rejects the
new wheel
## Why
Python 3.9 reached upstream end of life, while Python 3.10 remains
supported through October 2026. Internal usage analysis estimates Python
3.9 at 2.09% of identifiable SDK downloads over 30 days and 2.44% over
90 days. The support policy, decision rationale, and rollout analysis
are documented in the [Python SDK version support
PRD](https://app.notion.com/p/3a68e50b62b081cf8c00c9016924429c).
The automation follows the existing openai-go design: lifecycle and
public usage inputs are snapshotted before Codex runs; the pinned agent
runs as an unprivileged user with no command network access or
repository writes; and a separate job without the OpenAI credential may
publish an advisory issue. It never changes `Requires-Python`
automatically.
## User impact
Python 3.9 users remain on `openai==2.48.0`, the final compatible
release. Installing the next minor release on Python 3.9 is rejected by
standard package metadata rather than producing an import-time failure.
Python 3.10 through 3.14 remain supported, with Python 3.15 tested as
allowed-failure prerelease coverage.
A runtime-floor increase is treated as an SDK minor release rather than
a patch or major release when documented APIs remain compatible on
supported runtimes and `Requires-Python` protects unsupported
installers.
## Validation
- `rye build`
- `./scripts/lint`
- `./scripts/test`: 7,079 passed, 29 skipped
- Pydantic v1 session: 7,065 passed, 43 skipped
- wheel and sdist `Requires-Python` validation
- pip rejection using an actual Python 3.9 interpreter
- Bedrock and HTTPX2 dependency/resolver validation
- deterministic policy, lockfile, workflow YAML, and diff checks
## Release note
The OpenAI Python SDK now requires Python 3.10 or later.
`openai==2.48.0` is the final release installable on Python 3.9.
Previously published versions remain available, but unsupported runtimes
and older SDK releases do not receive guaranteed fixes or security
backports.1 parent 8a6adcb commit d4c151d
19 files changed
Lines changed: 1020 additions & 375 deletions
File tree
- .github
- codex
- prompts
- workflows
- examples/realtime
- scripts
- utils
- tests/lib
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
16 | 21 | | |
17 | 22 | | |
18 | 23 | | |
| |||
58 | 63 | | |
59 | 64 | | |
60 | 65 | | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
61 | 69 | | |
62 | 70 | | |
63 | 71 | | |
64 | | - | |
| 72 | + | |
65 | 73 | | |
66 | 74 | | |
67 | | - | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
68 | 84 | | |
69 | 85 | | |
70 | | - | |
| 86 | + | |
71 | 87 | | |
72 | | - | |
| 88 | + | |
73 | 89 | | |
74 | 90 | | |
75 | 91 | | |
| |||
92 | 108 | | |
93 | 109 | | |
94 | 110 | | |
95 | | - | |
96 | | - | |
| 111 | + | |
| 112 | + | |
97 | 113 | | |
98 | 114 | | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
99 | 120 | | |
100 | 121 | | |
101 | 122 | | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
102 | 129 | | |
103 | 130 | | |
104 | 131 | | |
105 | 132 | | |
106 | | - | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
107 | 139 | | |
108 | 140 | | |
109 | 141 | | |
| |||
112 | 144 | | |
113 | 145 | | |
114 | 146 | | |
115 | | - | |
| 147 | + | |
116 | 148 | | |
117 | 149 | | |
118 | 150 | | |
119 | 151 | | |
120 | 152 | | |
121 | 153 | | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
122 | 160 | | |
123 | 161 | | |
124 | 162 | | |
125 | 163 | | |
126 | | - | |
| 164 | + | |
127 | 165 | | |
128 | 166 | | |
129 | 167 | | |
130 | | - | |
| 168 | + | |
| 169 | + | |
131 | 170 | | |
132 | 171 | | |
133 | 172 | | |
| |||
167 | 206 | | |
168 | 207 | | |
169 | 208 | | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
0 commit comments