Created
July 1, 2025 09:24
-
-
Save MarcoGorelli/5f7fea4c99eb7cccc122f6ca69a157c5 to your computer and use it in GitHub Desktop.
compare versions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import io | |
| import polars as pl | |
| new = """aiohappyeyeballs==2.6.1 | |
| aiohttp==3.12.13 | |
| aiosignal==1.3.2 | |
| annotated-types==0.7.0 | |
| anthropic==0.55.0 | |
| anyio==4.9.0 | |
| anywidget==0.9.18 | |
| appdirs==1.4.4 | |
| argon2-cffi==25.1.0 | |
| argon2-cffi-bindings==21.2.0 | |
| arrow==1.3.0 | |
| asgiref==3.8.1 | |
| astropy==7.1.0 | |
| astropy-iers-data==0.2025.6.30.0.39.40 | |
| asttokens==3.0.0 | |
| async-lru==2.0.5 | |
| attrs==25.3.0 | |
| babel==2.17.0 | |
| beautifulsoup4==4.13.4 | |
| black==25.1.0 | |
| bleach==6.2.0 | |
| bokeh==3.7.3 | |
| branca==0.8.1 | |
| brand-yml==0.1.1 | |
| cachetools==5.5.2 | |
| certifi==2025.6.15 | |
| cffi==1.17.1 | |
| cfgv==3.4.0 | |
| chardet==5.2.0 | |
| charset-normalizer==3.4.2 | |
| chatlas==0.8.1 | |
| click==8.2.1 | |
| cloudpickle==3.1.1 | |
| colorama==0.4.6 | |
| colorcet==3.1.0 | |
| comm==0.2.2 | |
| commonmark==0.9.1 | |
| contourpy==1.3.2 | |
| coverage==7.9.1 | |
| cycler==0.12.1 | |
| dask==2025.5.1 | |
| dataframe-api-compat==0.2.7 | |
| debugpy==1.8.14 | |
| decorator==5.2.1 | |
| defusedxml==0.7.1 | |
| distlib==0.3.9 | |
| distributed==2025.5.1 | |
| distro==1.9.0 | |
| duckdb==1.3.1 | |
| eval-type-backport==0.2.2 | |
| execnet==2.1.1 | |
| executing==2.2.0 | |
| faicons==0.2.2 | |
| fastjsonschema==2.21.1 | |
| filelock==3.18.0 | |
| flake8==7.3.0 | |
| flake8-bugbear==24.12.12 | |
| flake8-pyproject==1.2.3 | |
| folium==0.20.0 | |
| fonttools==4.58.4 | |
| fqdn==1.5.1 | |
| frozenlist==1.7.0 | |
| fsspec==2025.5.1 | |
| geodatasets==2024.8.0 | |
| geopandas==1.1.1 | |
| google-ai-generativelanguage==0.6.15 | |
| google-api-core==2.25.1 | |
| google-api-python-client==2.174.0 | |
| google-auth==2.40.3 | |
| google-auth-httplib2==0.2.0 | |
| google-generativeai==0.8.5 | |
| googleapis-common-protos==1.70.0 | |
| great-tables==0.17.0 | |
| greenlet==3.2.3 | |
| grpcio==1.73.1 | |
| grpcio-status==1.71.2 | |
| h11==0.16.0 | |
| h3==4.3.0 | |
| hf-xet==1.1.5 | |
| holoviews==1.21.0 | |
| htmltools==0.6.0 | |
| httpcore==1.0.9 | |
| httplib2==0.22.0 | |
| httpx==0.28.1 | |
| huggingface-hub==0.33.1 | |
| identify==2.6.12 | |
| idna==3.10 | |
| importlib-metadata==8.7.0 | |
| importlib-resources==6.5.2 | |
| iniconfig==2.1.0 | |
| ipykernel==6.29.5 | |
| ipyleaflet==0.20.0 | |
| ipython==9.3.0 | |
| ipython-pygments-lexers==1.1.1 | |
| ipywidgets==8.1.7 | |
| isoduration==20.11.0 | |
| isort==6.0.1 | |
| jedi==0.19.2 | |
| jinja2==3.1.6 | |
| jiter==0.10.0 | |
| joblib==1.5.1 | |
| json5==0.12.0 | |
| jsonpatch==1.33 | |
| jsonpointer==3.0.0 | |
| jsonschema==4.24.0 | |
| jsonschema-specifications==2025.4.1 | |
| jupyter==1.1.1 | |
| jupyter-client==8.6.3 | |
| jupyter-console==6.6.3 | |
| jupyter-core==5.8.1 | |
| jupyter-events==0.12.0 | |
| jupyter-leaflet==0.20.0 | |
| jupyter-lsp==2.2.5 | |
| jupyter-server==2.16.0 | |
| jupyter-server-terminals==0.5.3 | |
| jupyterlab==4.4.4 | |
| jupyterlab-pygments==0.3.0 | |
| jupyterlab-server==2.27.3 | |
| jupyterlab-widgets==3.0.15 | |
| kiwisolver==1.4.8 | |
| langchain-core==0.3.63 | |
| langsmith==0.2.11 | |
| libsass==0.23.0 | |
| linkify-it-py==2.0.3 | |
| locket==1.0.0 | |
| markdown==3.8.2 | |
| markdown-it-py==3.0.0 | |
| markupsafe==3.0.2 | |
| matplotlib==3.10.3 | |
| matplotlib-inline==0.1.7 | |
| mccabe==0.7.0 | |
| mdit-py-plugins==0.4.2 | |
| mdurl==0.1.2 | |
| missingno==0.5.2 | |
| mistune==3.1.3 | |
| mizani==0.13.5 | |
| modin==0.33.2 | |
| modin-spreadsheet==0.1.2 | |
| msgpack==1.1.1 | |
| multidict==6.6.3 | |
| mypy-extensions==1.1.0 | |
| -e file:///home/runner/work/narwhals/narwhals | |
| nbclient==0.10.2 | |
| nbconvert==7.16.6 | |
| nbformat==5.10.4 | |
| nest-asyncio==1.6.0 | |
| nodeenv==1.9.1 | |
| notebook==7.4.4 | |
| notebook-shim==0.2.4 | |
| numpy==2.3.1 | |
| ollama==0.5.1 | |
| openai==1.93.0 | |
| orjson==3.10.18 | |
| overrides==7.7.0 | |
| packaging==24.2 | |
| palmerpenguins==0.1.4 | |
| pandas==2.2.3 | |
| pandas-stubs==2.2.3.250527 | |
| pandocfilters==1.5.1 | |
| panel==1.7.2 | |
| param==2.2.1 | |
| parso==0.8.4 | |
| partd==1.4.2 | |
| pathspec==0.12.1 | |
| patsy==1.0.1 | |
| pexpect==4.9.0 | |
| pillow==11.2.1 | |
| pip==25.1.1 | |
| platformdirs==4.3.8 | |
| playwright==1.53.0 | |
| plotly==6.2.0 | |
| plotnine==0.14.6 | |
| pluggy==1.6.0 | |
| polars==1.31.0 | |
| pooch==1.8.2 | |
| pre-commit==4.2.0 | |
| prometheus-client==0.22.1 | |
| prompt-toolkit==3.0.51 | |
| propcache==0.3.2 | |
| proto-plus==1.26.1 | |
| protobuf==5.29.5 | |
| psutil==7.0.0 | |
| psygnal==0.13.0 | |
| ptyprocess==0.7.0 | |
| pure-eval==0.2.3 | |
| pyarrow==20.0.0 | |
| pyarrow-stubs==20.0.0.20250627 | |
| pyasn1==0.6.1 | |
| pyasn1-modules==0.4.2 | |
| pycodestyle==2.14.0 | |
| pycparser==2.22 | |
| pydantic==2.11.7 | |
| pydantic-core==2.33.2 | |
| pyee==13.0.0 | |
| pyerfa==2.0.1.5 | |
| pyflakes==3.4.0 | |
| pygments==2.19.2 | |
| pyjwt==2.10.1 | |
| pyogrio==0.11.0 | |
| pyparsing==3.2.3 | |
| pyproj==3.7.1 | |
| pyproject-api==1.9.1 | |
| pyright==1.1.398 | |
| pytest==8.4.1 | |
| pytest-asyncio==1.0.0 | |
| pytest-base-url==2.1.0 | |
| pytest-cov==6.2.1 | |
| pytest-playwright==0.7.0 | |
| pytest-rerunfailures==15.1 | |
| pytest-timeout==2.4.0 | |
| pytest-xdist==3.7.0 | |
| python-dateutil==2.9.0.post0 | |
| python-dotenv==1.1.1 | |
| python-json-logger==3.3.0 | |
| python-multipart==0.0.20 | |
| python-slugify==8.0.4 | |
| pytz==2025.2 | |
| pyviz-comms==3.0.6 | |
| pyyaml==6.0.2 | |
| pyzmq==27.0.0 | |
| questionary==2.1.0 | |
| ray==2.47.1 | |
| referencing==0.36.2 | |
| requests==2.32.4 | |
| requests-toolbelt==1.0.0 | |
| rfc3339-validator==0.1.4 | |
| rfc3986-validator==0.1.1 | |
| rich==14.0.0 | |
| ridgeplot==0.3.2 | |
| rpds-py==0.25.1 | |
| rsa==4.9.1 | |
| rsconnect-python==1.26.0 | |
| ruamel-yaml==0.18.14 | |
| ruamel-yaml-clib==0.2.12 | |
| scikit-learn==1.7.0 | |
| scipy==1.15.3 | |
| seaborn==0.13.2 | |
| semver==3.0.4 | |
| send2trash==1.8.3 | |
| setuptools==80.9.0 | |
| shapely==2.1.1 | |
| -e file:///home/runner/work/narwhals/narwhals/py-shiny | |
| shinyswatch==0.9.0 | |
| shinywidgets==0.6.2 | |
| six==1.17.0 | |
| sniffio==1.3.1 | |
| sortedcontainers==2.4.0 | |
| soupsieve==2.7 | |
| stack-data==0.6.3 | |
| starlette==0.47.1 | |
| statsmodels==0.14.4 | |
| suntime==1.3.2 | |
| syrupy==4.9.1 | |
| tblib==3.1.0 | |
| tenacity==9.1.2 | |
| terminado==0.18.1 | |
| text-unidecode==1.3 | |
| threadpoolctl==3.6.0 | |
| timezonefinder==6.5.9 | |
| tinycss2==1.4.0 | |
| tokenizers==0.21.2 | |
| toolz==1.0.0 | |
| tornado==6.5.1 | |
| tox==4.27.0 | |
| tqdm==4.67.1 | |
| traitlets==5.14.3 | |
| traittypes==0.2.1 | |
| types-python-dateutil==2.9.0.20250516 | |
| types-pytz==2025.2.0.20250516 | |
| typing-extensions==4.14.0 | |
| typing-inspection==0.4.1 | |
| tzdata==2025.2 | |
| uc-micro-py==1.0.3 | |
| uri-template==1.3.0 | |
| uritemplate==4.2.0 | |
| urllib3==2.5.0 | |
| uvicorn==0.35.0 | |
| virtualenv==20.31.2 | |
| watchfiles==1.1.0 | |
| wcwidth==0.2.13 | |
| webcolors==24.11.1 | |
| webencodings==0.5.1 | |
| websocket-client==1.8.0 | |
| websockets==15.0.1 | |
| wheel==0.45.1 | |
| widgetsnbextension==4.0.14 | |
| xarray==2025.6.1 | |
| xyzservices==2025.4.0 | |
| yarl==1.20.1 | |
| zict==3.0.0 | |
| zipp==3.23.0""" | |
| old = """aiohappyeyeballs==2.6.1 | |
| aiohttp==3.12.13 | |
| aiosignal==1.3.2 | |
| annotated-types==0.7.0 | |
| anthropic==0.55.0 | |
| anyio==4.9.0 | |
| anywidget==0.9.18 | |
| appdirs==1.4.4 | |
| argon2-cffi==25.1.0 | |
| argon2-cffi-bindings==21.2.0 | |
| arrow==1.3.0 | |
| asgiref==3.8.1 | |
| astropy==7.1.0 | |
| astropy-iers-data==0.2025.6.30.0.39.40 | |
| asttokens==3.0.0 | |
| async-lru==2.0.5 | |
| attrs==25.3.0 | |
| babel==2.17.0 | |
| beautifulsoup4==4.13.4 | |
| black==25.1.0 | |
| bleach==6.2.0 | |
| bokeh==3.7.3 | |
| branca==0.8.1 | |
| brand-yml==0.1.1 | |
| cachetools==5.5.2 | |
| certifi==2025.6.15 | |
| cffi==1.17.1 | |
| cfgv==3.4.0 | |
| chardet==5.2.0 | |
| charset-normalizer==3.4.2 | |
| chatlas==0.8.1 | |
| click==8.2.1 | |
| cloudpickle==3.1.1 | |
| colorama==0.4.6 | |
| colorcet==3.1.0 | |
| comm==0.2.2 | |
| commonmark==0.9.1 | |
| contourpy==1.3.2 | |
| coverage==7.9.1 | |
| cycler==0.12.1 | |
| dask==2025.5.1 | |
| dataframe-api-compat==0.2.7 | |
| debugpy==1.8.14 | |
| decorator==5.2.1 | |
| defusedxml==0.7.1 | |
| distlib==0.3.9 | |
| distributed==2025.5.1 | |
| distro==1.9.0 | |
| duckdb==1.3.1 | |
| eval-type-backport==0.2.2 | |
| execnet==2.1.1 | |
| executing==2.2.0 | |
| faicons==0.2.2 | |
| fastjsonschema==2.21.1 | |
| filelock==3.18.0 | |
| flake8==7.3.0 | |
| flake8-bugbear==24.12.12 | |
| flake8-pyproject==1.2.3 | |
| folium==0.20.0 | |
| fonttools==4.58.4 | |
| fqdn==1.5.1 | |
| frozenlist==1.7.0 | |
| fsspec==2025.5.1 | |
| geodatasets==2024.8.0 | |
| geopandas==1.1.1 | |
| google-ai-generativelanguage==0.6.15 | |
| google-api-core==2.25.1 | |
| google-api-python-client==2.174.0 | |
| google-auth==2.40.3 | |
| google-auth-httplib2==0.2.0 | |
| google-generativeai==0.8.5 | |
| googleapis-common-protos==1.70.0 | |
| great-tables==0.17.0 | |
| greenlet==3.2.3 | |
| grpcio==1.73.1 | |
| grpcio-status==1.71.2 | |
| h11==0.16.0 | |
| h3==4.3.0 | |
| hf-xet==1.1.5 | |
| holoviews==1.21.0 | |
| htmltools==0.6.0 | |
| httpcore==1.0.9 | |
| httplib2==0.22.0 | |
| httpx==0.28.1 | |
| huggingface-hub==0.33.1 | |
| identify==2.6.12 | |
| idna==3.10 | |
| importlib-metadata==8.7.0 | |
| importlib-resources==6.5.2 | |
| iniconfig==2.1.0 | |
| ipykernel==6.29.5 | |
| ipyleaflet==0.20.0 | |
| ipython==9.3.0 | |
| ipython-pygments-lexers==1.1.1 | |
| ipywidgets==8.1.7 | |
| isoduration==20.11.0 | |
| isort==6.0.1 | |
| jedi==0.19.2 | |
| jinja2==3.1.6 | |
| jiter==0.10.0 | |
| joblib==1.5.1 | |
| json5==0.12.0 | |
| jsonpatch==1.33 | |
| jsonpointer==3.0.0 | |
| jsonschema==4.24.0 | |
| jsonschema-specifications==2025.4.1 | |
| jupyter==1.1.1 | |
| jupyter-client==8.6.3 | |
| jupyter-console==6.6.3 | |
| jupyter-core==5.8.1 | |
| jupyter-events==0.12.0 | |
| jupyter-leaflet==0.20.0 | |
| jupyter-lsp==2.2.5 | |
| jupyter-server==2.16.0 | |
| jupyter-server-terminals==0.5.3 | |
| jupyterlab==4.4.4 | |
| jupyterlab-pygments==0.3.0 | |
| jupyterlab-server==2.27.3 | |
| jupyterlab-widgets==3.0.15 | |
| kiwisolver==1.4.8 | |
| langchain-core==0.3.63 | |
| langsmith==0.2.11 | |
| libsass==0.23.0 | |
| linkify-it-py==2.0.3 | |
| locket==1.0.0 | |
| markdown==3.8.2 | |
| markdown-it-py==3.0.0 | |
| markupsafe==3.0.2 | |
| matplotlib==3.10.3 | |
| matplotlib-inline==0.1.7 | |
| mccabe==0.7.0 | |
| mdit-py-plugins==0.4.2 | |
| mdurl==0.1.2 | |
| missingno==0.5.2 | |
| mistune==3.1.3 | |
| mizani==0.13.5 | |
| modin==0.33.2 | |
| modin-spreadsheet==0.1.2 | |
| msgpack==1.1.1 | |
| multidict==6.6.3 | |
| mypy-extensions==1.1.0 | |
| -e file:///home/runner/work/narwhals/narwhals | |
| nbclient==0.10.2 | |
| nbconvert==7.16.6 | |
| nbformat==5.10.4 | |
| nest-asyncio==1.6.0 | |
| nodeenv==1.9.1 | |
| notebook==7.4.4 | |
| notebook-shim==0.2.4 | |
| numpy==2.3.1 | |
| ollama==0.5.1 | |
| openai==1.93.0 | |
| orjson==3.10.18 | |
| overrides==7.7.0 | |
| packaging==24.2 | |
| palmerpenguins==0.1.4 | |
| pandas==2.2.3 | |
| pandas-stubs==2.2.3.250527 | |
| pandocfilters==1.5.1 | |
| panel==1.7.2 | |
| param==2.2.1 | |
| parso==0.8.4 | |
| partd==1.4.2 | |
| pathspec==0.12.1 | |
| patsy==1.0.1 | |
| pexpect==4.9.0 | |
| pillow==11.2.1 | |
| pip==25.1.1 | |
| platformdirs==4.3.8 | |
| playwright==1.53.0 | |
| plotly==6.2.0 | |
| plotnine==0.14.6 | |
| pluggy==1.6.0 | |
| polars==1.31.0 | |
| pooch==1.8.2 | |
| pre-commit==4.2.0 | |
| prometheus-client==0.22.1 | |
| prompt-toolkit==3.0.51 | |
| propcache==0.3.2 | |
| proto-plus==1.26.1 | |
| protobuf==5.29.5 | |
| psutil==7.0.0 | |
| psygnal==0.13.0 | |
| ptyprocess==0.7.0 | |
| pure-eval==0.2.3 | |
| pyarrow==20.0.0 | |
| pyarrow-stubs==20.0.0.20250627 | |
| pyasn1==0.6.1 | |
| pyasn1-modules==0.4.2 | |
| pycodestyle==2.14.0 | |
| pycparser==2.22 | |
| pydantic==2.11.7 | |
| pydantic-core==2.33.2 | |
| pyee==13.0.0 | |
| pyerfa==2.0.1.5 | |
| pyflakes==3.4.0 | |
| pygments==2.19.2 | |
| pyjwt==2.10.1 | |
| pyogrio==0.11.0 | |
| pyparsing==3.2.3 | |
| pyproj==3.7.1 | |
| pyproject-api==1.9.1 | |
| pyright==1.1.398 | |
| pytest==8.4.1 | |
| pytest-asyncio==1.0.0 | |
| pytest-base-url==2.1.0 | |
| pytest-cov==6.2.1 | |
| pytest-playwright==0.7.0 | |
| pytest-rerunfailures==15.1 | |
| pytest-timeout==2.4.0 | |
| pytest-xdist==3.7.0 | |
| python-dateutil==2.9.0.post0 | |
| python-dotenv==1.1.1 | |
| python-json-logger==3.3.0 | |
| python-multipart==0.0.20 | |
| python-slugify==8.0.4 | |
| pytz==2025.2 | |
| pyviz-comms==3.0.6 | |
| pyyaml==6.0.2 | |
| pyzmq==27.0.0 | |
| questionary==2.1.0 | |
| ray==2.47.1 | |
| referencing==0.36.2 | |
| requests==2.32.4 | |
| requests-toolbelt==1.0.0 | |
| rfc3339-validator==0.1.4 | |
| rfc3986-validator==0.1.1 | |
| rich==14.0.0 | |
| ridgeplot==0.3.2 | |
| rpds-py==0.25.1 | |
| rsa==4.9.1 | |
| rsconnect-python==1.26.0 | |
| ruamel-yaml==0.18.14 | |
| ruamel-yaml-clib==0.2.12 | |
| scikit-learn==1.7.0 | |
| scipy==1.15.3 | |
| seaborn==0.13.2 | |
| semver==3.0.4 | |
| send2trash==1.8.3 | |
| setuptools==80.9.0 | |
| shapely==2.1.1 | |
| -e file:///home/runner/work/narwhals/narwhals/py-shiny | |
| shinyswatch==0.9.0 | |
| shinywidgets==0.6.2 | |
| six==1.17.0 | |
| sniffio==1.3.1 | |
| sortedcontainers==2.4.0 | |
| soupsieve==2.7 | |
| stack-data==0.6.3 | |
| starlette==0.47.1 | |
| statsmodels==0.14.4 | |
| suntime==1.3.2 | |
| syrupy==4.9.1 | |
| tblib==3.1.0 | |
| tenacity==9.1.2 | |
| terminado==0.18.1 | |
| text-unidecode==1.3 | |
| threadpoolctl==3.6.0 | |
| timezonefinder==6.5.9 | |
| tinycss2==1.4.0 | |
| tokenizers==0.21.2 | |
| toolz==1.0.0 | |
| tornado==6.5.1 | |
| tox==4.27.0 | |
| tqdm==4.67.1 | |
| traitlets==5.14.3 | |
| traittypes==0.2.1 | |
| types-python-dateutil==2.9.0.20250516 | |
| types-pytz==2025.2.0.20250516 | |
| typing-extensions==4.14.0 | |
| typing-inspection==0.4.1 | |
| tzdata==2025.2 | |
| uc-micro-py==1.0.3 | |
| uri-template==1.3.0 | |
| uritemplate==4.2.0 | |
| urllib3==2.5.0 | |
| uvicorn==0.35.0 | |
| virtualenv==20.31.2 | |
| watchfiles==1.1.0 | |
| wcwidth==0.2.13 | |
| webcolors==24.11.1 | |
| webencodings==0.5.1 | |
| websocket-client==1.8.0 | |
| websockets==15.0.1 | |
| wheel==0.45.1 | |
| widgetsnbextension==4.0.14 | |
| xarray==2025.6.1 | |
| xyzservices==2025.4.0 | |
| yarl==1.20.1 | |
| zict==3.0.0 | |
| zipp==3.23.0 | |
| """ | |
| newdf = pl.read_csv(io.StringIO(new)) | |
| olddf = pl.read_csv(io.StringIO(old)) | |
| olddf = ( | |
| pl.read_csv(io.StringIO(old), separator='=', has_header=False, new_columns=['name', 'void', 'version']) | |
| .drop('void') | |
| ) | |
| newdf = ( | |
| pl.read_csv(io.StringIO(new), separator='=', has_header=False, new_columns=['name', 'void', 'version']) | |
| .drop('void') | |
| ) | |
| print(newdf.join(olddf, on='name', how='left').filter(pl.col('version') != pl.col('version_right'))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment