diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3d5cd9c87e..615781d5e2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -848,6 +848,7 @@ jobs: - 3.9 - "3.10" - 3.11 + - 3.12 container: - none # Not manylinux, we will use this space to build the WASM assets - 2014 @@ -881,7 +882,7 @@ jobs: - is-full-run: false os: macos-11 - # Exclude Python 3.7, 3.8, 3.10, 3.11 builds + # Exclude Python 3.7, 3.8, 3.10, 3.11, 3.12 builds - is-full-run: false python-version: 3.7 @@ -894,6 +895,9 @@ jobs: - is-full-run: false python-version: 3.11 + - is-full-run: false + python-version: 3.12 + # NOTE: don't fail fast as sometimes npm blocks the burst of fetches from GHA fail-fast: false ################################## @@ -1388,6 +1392,7 @@ jobs: - 3.9 - "3.10" - 3.11 + - 3.12 node-version: [18.x] is-full-run: - ${{ needs.initialize.outputs.FULL_RUN == 'true' }} @@ -1410,7 +1415,7 @@ jobs: - python-version: 3.7 os: macos-11 - # Exclude Python 3.7, 3.8, 3.10, 3.11 builds + # Exclude Python 3.7, 3.8, 3.10, 3.11, 3.12 builds - is-full-run: false python-version: 3.7 @@ -1422,6 +1427,9 @@ jobs: - is-full-run: false python-version: 3.11 + + - is-full-run: false + python-version: 3.12 # NOTE: don't fail fast as sometimes npm blocks the burst of fetches from GHA fail-fast: false @@ -1523,11 +1531,11 @@ jobs: # would need an arm machine to test - name: Install wheel (OSX) run: python -m pip install -U --no-dependencies *x86*.whl --target python/perspective - if: ${{ runner.os == 'macOS' && matrix.python-version != '3.11' }} + if: ${{ runner.os == 'macOS' && matrix.python-version != '3.11' && matrix.python-version != '3.12' }} - name: Install wheel (OSX 3.11+) run: python -m pip install -U --no-dependencies *universal*.whl --target python/perspective - if: ${{ runner.os == 'macOS' && matrix.python-version == '3.11' }} + if: ${{ runner.os == 'macOS' && (matrix.python-version == '3.11' || matrix.python-version == '3.12') }} - name: Install wheel (windows) run: python -m pip install -U --no-dependencies (Get-ChildItem .\*.whl | Select-Object -Expand FullName) --target python/perspective @@ -1909,6 +1917,10 @@ jobs: with: name: perspective-python-dist-ubuntu-20.04-3.11 + - uses: actions/download-artifact@v3 + with: + name: perspective-python-dist-ubuntu-20.04-3.12 + - uses: actions/download-artifact@v3 with: name: perspective-python-dist-macos-11-3.7 @@ -1929,6 +1941,10 @@ jobs: with: name: perspective-python-dist-macos-11-3.11 + - uses: actions/download-artifact@v3 + with: + name: perspective-python-dist-macos-11-3.12 + - uses: actions/download-artifact@v3 with: name: perspective-python-dist-windows-2022-3.7 @@ -1949,6 +1965,10 @@ jobs: with: name: perspective-python-dist-windows-2022-3.11 + - uses: actions/download-artifact@v3 + with: + name: perspective-python-dist-windows-2022-3.12 + - uses: actions/download-artifact@v3 with: name: perspective-python-dist-pyodide diff --git a/python/perspective/requirements/requirements-312.txt b/python/perspective/requirements/requirements-312.txt new file mode 100644 index 0000000000..9225266a81 --- /dev/null +++ b/python/perspective/requirements/requirements-312.txt @@ -0,0 +1,157 @@ +Babel==2.13.1 +Faker==20.0.3 +Jinja2==3.1.2 +MarkupSafe==2.1.3 +PyYAML==6.0.1 +Pygments==2.16.1 +Send2Trash==1.8.2 +Sphinx==7.2.6 +aiofiles==22.1.0 +aiohttp==3.9.1 +aiosignal==1.3.1 +aiosqlite==0.19.0 +alabaster==0.7.13 +annotated-types==0.6.0 +anyio==3.7.1 +appnope==0.1.3 +argon2-cffi==23.1.0 +argon2-cffi-bindings==21.2.0 +arrow==1.3.0 +asttokens==2.4.1 +async-timeout==4.0.3 +attrs==23.1.0 +beautifulsoup4==4.12.2 +black==23.1.0 +bleach==6.1.0 +certifi==2023.7.22 +cffi==1.16.0 +charset-normalizer==3.3.2 +click==8.1.7 +comm==0.2.0 +coverage==7.3.2 +debugpy==1.8.0 +decorator==5.1.1 +defusedxml==0.7.1 +deprecation==2.1.0 +docutils==0.20.1 +executing==2.0.1 +fastapi==0.104.1 +fastjsonschema==2.19.0 +flake8==6.1.0 +flake8-black==0.3.6 +fqdn==1.5.1 +frozenlist==1.4.0 +h11==0.14.0 +html5lib==1.1 +httpcore==1.0.2 +httpx==0.25.1 +idna==3.4 +imagesize==1.4.1 +iniconfig==2.0.0 +ipykernel==6.26.0 +ipython==8.17.2 +ipython-genutils==0.2.0 +ipywidgets==8.1.1 +isoduration==20.11.0 +jedi==0.19.1 +json5==0.9.14 +jsonpointer==2.4 +jsonschema==4.19.2 +jsonschema-specifications==2023.11.1 +jupyter-events==0.9.0 +jupyter-ydoc==0.2.5 +jupyter_client==8.6.0 +jupyter_core==5.5.0 +jupyter_packaging==0.12.3 +jupyter_server==2.10.1 +jupyter_server_fileid==0.9.0 +jupyter_server_terminals==0.4.4 +jupyter_server_ydoc==0.8.0 +jupyterlab==3.6.6 +jupyterlab-pygments==0.2.2 +jupyterlab-widgets==3.0.9 +jupyterlab_server==2.25.1 +matplotlib-inline==0.1.6 +mccabe==0.7.0 +mistune==3.0.2 +multidict==6.0.4 +mypy-extensions==1.0.0 +nbclassic==1.0.0 +nbclient==0.9.0 +nbconvert==7.11.0 +nbformat==5.9.2 +nest-asyncio==1.5.8 +notebook==6.5.4 +notebook_shim==0.2.3 +numpy==1.26.2 +overrides==7.4.0 +packaging==23.2 +pandas==2.1.3 +pandocfilters==1.5.0 +parso==0.8.3 +pathspec==0.11.2 +pexpect==4.8.0 +pip==23.3.1 +platformdirs==4.0.0 +pluggy==1.3.0 +prometheus-client==0.18.0 +prompt-toolkit==3.0.41 +psutil==5.9.6 +ptyprocess==0.7.0 +pure-eval==0.2.2 +pyarrow==14.0.1 +pybind11==2.11.1 +pycodestyle==2.11.1 +pycparser==2.21 +pydantic==2.5.1 +pydantic_core==2.14.3 +pyflakes==3.1.0 +pytest==7.4.3 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.21.1 +pytest-cov==4.1.0 +pytest-tornado==0.8.1 +pytest_check_links==0.9.0 +python-dateutil==2.8.2 +python-json-logger==2.0.7 +pytz==2023.3.post1 +pyzmq==25.1.1 +referencing==0.31.0 +requests==2.31.0 +rfc3339-validator==0.1.4 +rfc3986-validator==0.1.1 +rpds-py==0.12.0 +setuptools==68.2.2 +six==1.16.0 +sniffio==1.3.0 +snowballstemmer==2.2.0 +soupsieve==2.5 +sphinx-markdown-builder==0.6.5 +sphinxcontrib-applehelp==1.0.7 +sphinxcontrib-devhelp==1.0.5 +sphinxcontrib-htmlhelp==2.0.4 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.6 +sphinxcontrib-serializinghtml==1.1.9 +stack-data==0.6.3 +starlette==0.27.0 +tabulate==0.9.0 +terminado==0.18.0 +tinycss2==1.2.1 +tomlkit==0.12.3 +tornado==6.3.3 +traitlets==5.13.0 +types-python-dateutil==2.8.19.14 +typing_extensions==4.8.0 +tzdata==2023.3 +uri-template==1.3.0 +urllib3==2.1.0 +wcwidth==0.2.10 +webcolors==1.13 +webencodings==0.5.1 +websocket-client==1.6.4 +wheel==0.41.3 +widgetsnbextension==4.0.9 +y-py==0.6.2 +yarl==1.9.2 +ypy-websocket==0.8.4 diff --git a/python/perspective/setup.py b/python/perspective/setup.py index acf7869f32..6d5542c993 100644 --- a/python/perspective/setup.py +++ b/python/perspective/setup.py @@ -311,6 +311,7 @@ def run_check(self): "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Framework :: Jupyter :: JupyterLab", "Framework :: Jupyter :: JupyterLab :: 3", "Framework :: Jupyter :: JupyterLab :: Extensions", diff --git a/tools/perspective-scripts/sh_perspective.mjs b/tools/perspective-scripts/sh_perspective.mjs index f6d47c5354..966e108cd2 100644 --- a/tools/perspective-scripts/sh_perspective.mjs +++ b/tools/perspective-scripts/sh_perspective.mjs @@ -276,6 +276,8 @@ export function python_version(manylinux) { return `/opt/python/cp${v}-cp${v}${ v === "37" || v === "36" ? "m" : "" }/bin/python`; + } else if (getarg("--python312")) { + return `/opt/python/cp312-cp312/bin/python`; } else if (getarg("--python311")) { return `/opt/python/cp311-cp311/bin/python`; } else if (getarg("--python310")) { @@ -292,6 +294,8 @@ export function python_version(manylinux) { } else { if (process.env.PYTHON_VERSION) { return `python${process.env.PYTHON_VERSION}`; + } else if (getarg("--python312")) { + return "python3.12"; } else if (getarg("--python311")) { return "python3.11"; } else if (getarg("--python310")) { @@ -344,8 +348,8 @@ sh.docker = function docker(...args) { ${env_vars} \ -v${CWD}:/usr/src/app/perspective \ -w /usr/src/app/perspective --shm-size=2g -u root \ - --cpus="${CPUS}.0" - ${IMAGE} + --cpus="${CPUS}.0" + ${IMAGE} bash -c ${sh(...args).toString()}`; }; diff --git a/tools/perspective-scripts/update_python.mjs b/tools/perspective-scripts/update_python.mjs index 248442e6aa..20d605cd81 100644 --- a/tools/perspective-scripts/update_python.mjs +++ b/tools/perspective-scripts/update_python.mjs @@ -24,6 +24,7 @@ const VERSIONS = [ "3.9", "3.10", "3.11", + "3.12", ]; for (const version of VERSIONS) { diff --git a/yarn.lock b/yarn.lock index 7c06876686..ec60acc619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4008,10 +4008,10 @@ resolved "https://registry.npmjs.org/@prospective.co/procss/-/procss-0.1.13.tgz" integrity sha512-cgkhvnge5WM5Ih6f+a/TivPhvs3I2HZYnBlK9zZxrG+QasTSYTSFZ6T+xcBgwjeZeviRb1HV3sW1CCLjlXBOwA== -"@prospective.co/procss@^0.1.14": - version "0.1.14" - resolved "https://registry.yarnpkg.com/@prospective.co/procss/-/procss-0.1.14.tgz#93a82c7d0d65aa6a12e75c742142e443657736e8" - integrity sha512-Q+6eag8vk0prnAAQ/UD8YKxmydH3iO4O+Kc1YIw+BrhqHQSOm24bqj0iJOedp3KOpZ0zEj/7zzysCYPI45hZDA== +"@prospective.co/procss@^0.1.15": + version "0.1.15" + resolved "https://registry.yarnpkg.com/@prospective.co/procss/-/procss-0.1.15.tgz#d6c7eb7adf9c567713555c6d626be2a9f76f8a83" + integrity sha512-wTjE7IqzU+WmR0Qkyn9i/Mgr0EFHEzmOY8xifXrTIVdeEp8W9XikKE/y+ozWVPgEBM+A+WpF90/8G4u03yfsyQ== "@rjsf/core@^3.1.0": version "3.2.1"