Skip to content

Instantly share code, notes, and snippets.

@MarcoGorelli
Created July 1, 2025 09:24
Show Gist options
  • Select an option

  • Save MarcoGorelli/5f7fea4c99eb7cccc122f6ca69a157c5 to your computer and use it in GitHub Desktop.

Select an option

Save MarcoGorelli/5f7fea4c99eb7cccc122f6ca69a157c5 to your computer and use it in GitHub Desktop.
compare versions
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