Process for upgrading the stdlib to a new cpython version ========================================================== .. note:: overly detailed 0. make sure your working dir is clean 1. check out the branch vendor/stdlib-3.9 2. upgrade the files there 2a. `rm -rf lib-python/3/*` 2b. copy the files from the cpython repo 2c. copy to `lib_pypy` - `Modules/_ctypes/_ctypes_test.c` - `Modules/_testcapimodule.c` - `Modules/_testmultiphase.c` - `Modules/_testmultiphase.c.h` 2d. `hg add lib-python/3/` 2e. `hg remove --after` 2f. show copied files in cpython repo by running appropriate git commands 2g. fix copies / renames manually by running `hg copy --after ` for each copied file 3. update stdlib-version.txt with the output of `git status` from the cpython repo 4. commit 5. update to py3.9 6. create a integration branch for the new stdlib (just hg branch stdlib-$version) 7. merge vendor/stdlib or vendor/stdlib-3-* 8. commit 10. fix issues. Note especially changes in datetime.py, venv/__init__.py, and others. 11. commit --close-branch 14. update version numbers in sys/version.py and cpyext/include/patch_level.h Process for updating a point release if the diff is small ========================================================= In cpython, do `git diff -r -r Lib > ` so for instance `git diff -r v3.9.7 -r v3.9.9 Lib > /tmp/patch3.9.9` In pypy, cd into `lib-python/3` Then do patch -p2 -i If patch asks about reveresed patches, reply "no" and apply anyway "yes" Carefully note the failures in the *.rej files and try to resolve the conflicts. Delete all the *.orig files, and look for files that should be added to version control Look for removed files that should be deleted from version control Then update sys/version.py, cpyext/include/patchlevel.h, and ./stdlib-version.txt Make sure binary files (especially pip and setuptools wheels) were copied correctly. On at least one occasion they were empty after this process. Make sure binary files (especially pip and setuptools wheels) were copied correctly. On at least one occasion they were empty after this process.