diff --git a/extra/python/PKGBUILD b/extra/python/PKGBUILD
index 1fec0e30b..321b27f87 100644
--- a/extra/python/PKGBUILD
+++ b/extra/python/PKGBUILD
@@ -13,7 +13,7 @@ shopt -s extglob
 
 pkgbase=python
 pkgname=(python python-tests)
-pkgver=3.8.6
+pkgver=3.9.0
 pkgrel=1
 _pybasever=${pkgver%.*}
 pkgdesc="Next generation of the python high-level scripting language"
@@ -23,7 +23,7 @@ url="https://www.python.org/"
 depends=('bzip2' 'expat' 'gdbm' 'libffi' 'libnsl' 'libxcrypt' 'openssl' 'zlib')
 makedepends=('tk' 'sqlite' 'bluez-libs' 'mpdecimal' 'llvm' 'gdb' 'xorg-server-xvfb' 'ttf-font')
 source=("https://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz"{,.asc})
-sha512sums=('22faec84f6e172e1ac7c6bd6fd37e9b6ae4afc91cf5136aa8cac8ebbed8d18793f9196e8749b8ccc43447cb6c41cb450f65ea72dd363c06dfaeb14e0455f5560'
+sha512sums=('b141039c9701a8cb0d15cd11a279153077524af4d0599e7d2c7279d4c18d05fda06b33ef82342d875de996c7117b7dc6eb154dc3669d38a1efa99801aeec6c5e'
             'SKIP')
 validpgpkeys=('0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D'  # Ned Deily (Python release signing key) <nad@python.org>
               'E3FF2839C048B25C084DEBE9B26995E310250568') # Ɓukasz Langa (GPG langa.pl) <lukasz@langa.pl>
@@ -64,7 +64,8 @@ build() {
               --with-system-ffi \
               --with-system-libmpdec \
               --enable-loadable-sqlite-extensions \
-              --without-ensurepip
+              --without-ensurepip \
+              --with-tzpath=/usr/share/zoneinfo
 
   # Obtain next free server number for xvfb-run; this even works in a chroot environment.
   export servernum=99
@@ -75,6 +76,8 @@ build() {
 
 check() {
   # test_tk: https://bugs.python.org/issue41306
+  # test_lib2to3: https://bugs.python.org/issue41970
+  # test_tools: https://bugs.python.org/issue41971
 
   cd Python-${pkgver}
 
@@ -84,7 +87,7 @@ check() {
 
   LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \
   LC_CTYPE=en_US.UTF-8 xvfb-run -s "-screen 0 1920x1080x16 -ac +extension GLX" -a -n "$servernum" \
-    "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_tk
+    "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_tk -x test_lib2to3 -x test_tools
 }
 
 package_python() {
diff --git a/extra/python/genrebuild b/extra/python/genrebuild
index 5f447b0bf..782a9ca00 100755
--- a/extra/python/genrebuild
+++ b/extra/python/genrebuild
@@ -1,7 +1,14 @@
 #!/bin/bash
-(
-_pyver=$(expac %v python | grep -oP '^[0-9]+\.[0-9]+')
-pacman -Fq /usr/lib/python${_pyver}/ | grep -v archlinuxcn | cut -d / -f 2
-sogrep all libpython${_pyver}m.so
-printf "%s\n" boost vim
-) | sort -u
+
+pyver=$(pacman -S --print-format %v python | grep -oP '^[0-9]+\.[0-9]+')
+exclude=('python2' 'python2-.*' 'pypy3\?' 'cython2' 'cuda' 'metasploit'
+         'mysql-workbench' 'ntop' 'dia' 'ghidra' 'kross-interpreters'
+         'kodi-gbm' 'kodi-wayland' 'kodi-x11')
+
+{
+pacman -Fq /usr/lib/python${pyver}/ | grep -v archlinuxcn | cut -d / -f 2
+pacman -Fxq "\.cpython-${pyver/.}.pyc$" | grep -v archlinuxcn | cut -d / -f 2
+sogrep all libpython${pyver}.so
+ssh dragon.archlinux.org "parallel \"zstdgrep -q 'Py_Initialize\|PyInit_\|PyModule_Create2' {} && pacman -Qpq {}\" ::: /srv/ftp/pool/*/*.zst"
+ssh dragon.archlinux.org "parallel \"xzgrep -q 'Py_Initialize\|PyInit_\|PyModule_Create2' {} && pacman -Qpq {}\" ::: /srv/ftp/pool/*/*.xz"
+} | grep -xvf <(printf "%s\n" "${exclude[@]}") | sort -u