Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: pcds-5.9.0 #341

Merged
merged 24 commits into from
Aug 28, 2024
Merged

ENH: pcds-5.9.0 #341

merged 24 commits into from
Aug 28, 2024

Conversation

ZLLentz
Copy link
Member

@ZLLentz ZLLentz commented Aug 22, 2024

closes #314
closes #331
closes #335
closes #337

Things I changed, in diff order:

  • Adjust the workflow to only run release note and export steps if the create environment step succeeds
  • Extend the python upgrade readiness checks to consider pip and security pins
  • move bluesky-queueserver from conda to pip to avoid some dependencies
  • add ghapi to conda packages
  • move grpcio-tools from conda to pip to avoid unmaintained feedstocks
  • force opencv to pick the qt5 builds (not the qt6 builds)
  • add shapely to conda packages
  • remove no longer needed pins and reorganize the pins a bit
  • pin matplotlib to avoid qt6 shenanigans (for now)
  • pin numpy to avoid 2.0 hazard (for now)
  • adjust keep-updated as I thought appropriate
  • add bloptools to pip packages, not to conda packages, to avoid unmaintained feedstocks
  • add py-trees to pip packages
  • reorganize pip pins too
  • simplify security pins to the minimum needed
  • make check_py_compat.sh consider compatibly with the security pins
  • add a pypi compat script
  • simplify and fix get_extras script via using standard tooling
  • rearrange the release notes table to put new packages first to generate hype
  • do not error out on pip check errors, which are noisy right now since they trigger on incomplete metadata

Release notes generated (TODO fix any broken links, add links to new packages):

Added the Following Packages

PCDS Package Updates

Package Old New Release Notes
atef 1.4.0 1.5.0 https://github.com/pcdshub/atef/releases/tag/v1.5.0
hutch-python 1.20.0 1.21.0 https://github.com/pcdshub/hutch-python/releases/tag/v1.21.0
lucid 0.10.3 0.11.0 https://github.com/pcdshub/lucid/releases/tag/v0.11.0
nabs 1.5.4 1.5.5 https://github.com/pcdshub/nabs/releases/tag/v1.5.5
pcdscalc 0.5.1 0.6.0 https://github.com/pcdshub/pcdscalc/releases/tag/v0.6.0
pcdsdaq 2.4.3 2.4.4 https://github.com/pcdshub/pcdsdaq/releases/tag/v2.4.4
pcdsdevices 8.4.0 8.5.0 https://github.com/pcdshub/pcdsdevices/releases/tag/v8.5.0
pmgr 2.1.2 2.1.3 https://github.com/pcdshub/pmgr/releases/tag/R2.1.3
psdaq-control-minimal 3.3.38 4.1.2 https://github.com/pcdshub/psdaq-control-minimal/releases/tag/4.1.2
pswalker 1.0.8 1.0.10 https://github.com/pcdshub/pswalker/releases/tag/v1.0.10
pyca 3.2.0 3.2.1 https://github.com/slaclab/pyca/releases/tag/3.2.1
transfocate 0.5.8 0.5.9 https://github.com/pcdshub/transfocate/releases/tag/v0.5.9
typhos 3.1.1 4.0.0 https://github.com/pcdshub/typhos/releases/tag/v4.0.0

SLAC Package Updates

Package Old New Release Notes
psdm_qs_cli 0.3.7 0.3.8 https://github.com/slaclab/psdm_qs_cli/releases/tag/v0.3.8
pydm 1.22.1 1.24.1 https://github.com/slaclab/pydm/releases/tag/v1.23.0
https://github.com/slaclab/pydm/releases/tag/v1.24.0
https://github.com/slaclab/pydm/releases/tag/v1.24.1
timechart 1.5.1 1.5.3 https://github.com/slaclab/timechart/releases/tag/v1.5.3

Lab Community Package Updates

Package Old New
hklpy 1.1.0 1.1.1
pcaspy 0.7.3 0.8.1
pyepics 3.5.2 3.5.7

Python Community Core Package Updates

Package Old New
flake8 7.0.0 7.1.1
numpy 1.24.4 1.26.4
opencv 4.8.1 4.10.0
pandas 2.1.1 2.2.2
pre-commit 3.7.0 3.8.0
pytest 8.1.1 8.3.2
scikit-image 0.21.0 0.24.0
scikit-learn 1.3.1 1.5.1
scipy 1.11.3 1.13.1
sphinx 6.2.1 7.4.7
xarray 2023.9.0 2024.7.0

Other Python Community Major Updates

Package Old New
anyio 3.7.1 4.4.0
asteval 0.9.31 1.0.2
attrs 23.1.0 24.2.0
boltons 23.0.0 24.0.0
cloudpickle 2.2.1 3.0.0
conda 23.9.0 24.7.1
conda-build 3.27.0 24.7.1
conda-forge-pinning 2023.10.06.16.31.06 2024.08.27.19.11.25
cryptography 42.0.5 43.0.0
dask 2023.9.3 2024.8.0
dask-core 2023.9.3 2024.8.0
distributed 2023.9.3 2024.8.0
executing 1.2.0 2.0.1
fsspec 2023.9.2 2024.6.1
future 0.18.3 1.0.0
gdb 14.2 15.1
graphviz 8.1.0 12.0.0
harfbuzz 8.2.1 9.0.0
httpcore 0.18.0 1.0.5
imagecodecs 2023.9.18 2024.6.1
importlib-metadata 6.8.0 8.4.0
importlib_metadata 6.8.0 8.4.0
jsonpointer 2.4 3.0.0
keyring 24.3.0 25.3.0
libabseil 20230802.1 20240116.2
libarrow 14.0.2 17.0.0
libarrow-acero 14.0.2 17.0.0
libarrow-dataset 14.0.2 17.0.0
libarrow-substrait 14.0.2 17.0.0
libclang13 15.0.7 18.1.8
libgcc-ng 13.2.0 14.1.0
libgfortran-ng 13.2.0 14.1.0
libgfortran5 13.2.0 14.1.0
libopenvino 2023.1.0 2024.3.0
libopenvino-auto-batch-plugin 2023.1.0 2024.3.0
libopenvino-auto-plugin 2023.1.0 2024.3.0
libopenvino-hetero-plugin 2023.1.0 2024.3.0
libopenvino-intel-cpu-plugin 2023.1.0 2024.3.0
libopenvino-intel-gpu-plugin 2023.1.0 2024.3.0
libopenvino-ir-frontend 2023.1.0 2024.3.0
libopenvino-onnx-frontend 2023.1.0 2024.3.0
libopenvino-paddle-frontend 2023.1.0 2024.3.0
libopenvino-pytorch-frontend 2023.1.0 2024.3.0
libopenvino-tensorflow-frontend 2023.1.0 2024.3.0
libopenvino-tensorflow-lite-frontend 2023.1.0 2024.3.0
libparquet 14.0.2 17.0.0
libstdcxx-ng 13.2.0 14.1.0
libsystemd0 254 255
llvm-openmp 17.0.2 18.1.8
lxml 4.9.3 5.3.0
mkdocs-autorefs 0.5.0 1.1.0
mkl 2022.2.1 2023.2.0
nodejs 20.8.0 22.6.0
orc 1.9.2 2.0.2
packaging 23.2 24.1
param 1.13.0 2.1.1
pip 23.3.2 24.2
platformdirs 3.11.0 4.2.2
protobuf 4.24.4 5.27.4
psutil 5.9.5 6.0.0
pulseaudio-client 16.1 17.0
pyarrow 14.0.2 17.0.0
pydantic 1.10.13 2.8.2
pytest-cov 4.1.0 5.0.0
python-tzdata 2023.3 2024.1
pytz 2023.3.post1 2024.1
pyzmq 25.1.1 26.2.0
rapidfuzz 2.15.1 3.9.6
regex 2023.10.3 2024.7.24
requests-oauthlib 1.3.1 2.0.0
ripgrep 13.0.0 14.1.0
setuptools 68.2.2 72.2.0
smmap 3.0.5 5.0.0
sphinx-autodoc-typehints 1.21.8 2.2.3
sphinx-click 5.0.1 6.0.0
sphinx_rtd_theme 1.2.0 2.0.0
sphinxcontrib-applehelp 1.0.7 2.0.0
sphinxcontrib-devhelp 1.0.5 2.0.0
sphinxcontrib-qthelp 1.0.6 2.0.0
svt-av1 1.7.0 2.2.1
tblib 2.0.0 3.0.0
tenacity 8.2.3 9.0.0
tifffile 2023.9.26 2024.6.18
tokenize-rt 5.2.0 6.0.0
trove-classifiers 2023.11.29 2024.7.2
tzdata 2023c 2024a
watchdog 3.0.0 4.0.1
webcolors 1.13 24.8.0
xyzservices 2023.10.0 2024.6.0
yarn 3.6.4 4.4.1
cyclonedx-python-lib 4.2.2 7.6.0
py-serializable 0.11.1 1.1.0

Packages With Degraded Versions

Package Old New
gsl 2.7 2.6
numexpr 2.8.7 2.7.3

Added the Following Dependencies

  • absl-py (required by ortools)
  • aiohappyeyeballs (required by aiohttp, which is used in bluesky, bluesky-live, databroker, hklpy, ipython, ophyd, pandas, scikit-image, suitcase-tiff, whatrecord, xarray)
  • archspec (required by conda)
  • azure-core-cpp (required by azure-identity-cpp, azure-storage-blobs-cpp, azure-storage-common-cpp, azure-storage-files-datalake-cpp, libarrow)
  • azure-identity-cpp (required by libarrow)
  • azure-storage-blobs-cpp (required by azure-storage-files-datalake-cpp, libarrow)
  • azure-storage-common-cpp (required by azure-storage-blobs-cpp, azure-storage-files-datalake-cpp)
  • azure-storage-files-datalake-cpp (required by libarrow)
  • backports.strenum (required by conda-smithy)
  • backports.tarfile (required by jaraco.context, which is used in ipython, jupyter)
  • conda-libmamba-solver (required by conda)
  • dask-expr (required by dask, which is used in bluesky, bluesky-live, databroker, hklpy, ophyd, pandas, scikit-image, suitcase-tiff, xarray)
  • dill (required by lmfit, which is used in bluesky, hxrsnd)
  • distro (required by conda)
  • elfutils (required by memray)
  • fastcore (required by ghapi)
  • flexcache (required by pint, which is used in hklpy, ophyd)
  • flexparser (required by pint, which is used in hklpy, ophyd)
  • fmt (required by libmamba, libmambapy)
  • frozendict (required by conda, conda-build)
  • geos (required by shapely)
  • gettext-tools (required by gettext)
  • imath (required by openexr)
  • immutabledict (required by ortools)
  • jaraco.context (required by jaraco.text, keyring, which are used in ipython, jupyter)
  • jaraco.functools (required by jaraco.text, keyring, which are used in ipython, jupyter)
  • lazy-loader (required by lazy_loader, scikit-image)
  • libasprintf (required by gettext, libasprintf-devel, libgpg-error, libopencv)
  • libasprintf-devel (required by gettext)
  • libclang-cpp15 (required by qt-main)
  • libgettextpo (required by gettext, libgettextpo-devel, libgpg-error, libopencv)
  • libgettextpo-devel (required by gettext)
  • libgoogle-cloud-storage (required by libarrow)
  • libhwy (required by libjxl, which is used in bluesky, databroker, scikit-image, suitcase-tiff)
  • libjxl (required by imagecodecs, which is used in bluesky, databroker, scikit-image, suitcase-tiff)
  • libllvm18 (required by libclang13)
  • libmamba (required by libmambapy)
  • libmambapy (required by conda-libmamba-solver)
  • libmicrohttpd (required by elfutils)
  • libopenvino-intel-npu-plugin (required by ffmpeg, libopencv)
  • libsolv (required by libmamba)
  • libtorch (required by pytorch)
  • menuinst (required by conda, conda-build)
  • mkdocs-get-deps (required by mkdocs)
  • openexr (required by libopencv)
  • ortools (required by bloptools)
  • pyarrow-core (required by pyarrow, which is used in bluesky, bluesky-live, databroker, hklpy, ophyd, pandas, scikit-image, suitcase-tiff, xarray)
  • pyarrow-hotfix (required by dask, which is used in bluesky, bluesky-live, databroker, hklpy, ophyd, pandas, scikit-image, suitcase-tiff, xarray)
  • pybind11-abi (required by libmambapy)
  • pydot (required by py-trees)
  • rattler-build (required by rattler-build-conda-compat)
  • rattler-build-conda-compat (required by conda-smithy)
  • reproc (required by libmamba, reproc-cpp)
  • reproc-cpp (required by libmamba)
  • tabulate (required by numpydoc, pandas, which are used in ads-async, atef, blark, bluesky, bluesky-live, databroker, hklpy, hutch-python, ipython, jupyter, lightpath, ophyd, pcdsutils, pmpsui, pyepics, scikit-image, suitcase-tiff, transfocate, typhos, whatrecord, xarray)
  • typer-slim (required by typer-slim-standard)
  • typer-slim-standard (required by typer)
  • uv (required by hatch, which is used in ipython, jupyter)
  • wayland (required by libva, wayland-protocols)
  • wayland-protocols (required by libva)
  • xorg-libxxf86vm (required by gst-plugins-base)
  • yaml-cpp (required by libmamba, libmambapy)

Removed the Following Packages

  • aiofiles
  • aiosqlite
  • alembic
  • anaconda-project
  • async_generator
  • asyncpg
  • atomicwrites
  • awkward
  • awkward-cpp
  • backports.functools_lru_cache
  • cachey
  • clyent
  • cssselect
  • curl
  • dataclasses
  • datashape
  • ecdsa
  • fastapi
  • h5netcdf
  • heapdict
  • httptools
  • js2py
  • libarrow-flight
  • libarrow-flight-sql
  • libarrow-gandiva
  • libclang
  • libnuma
  • libtool
  • mako
  • markdown2
  • ndindex
  • ocl-icd-system
  • ophyd-async
  • orjson
  • parquet
  • pyasn1
  • pyct-core
  • pyjsparser
  • pyopenssl
  • pyquery
  • python-dotenv
  • python-jose
  • rdma-core
  • readtime
  • rsa
  • ruamel_yaml
  • sparse
  • starlette
  • thriftpy2
  • tiled
  • ucx
  • uvicorn
  • uvloop
  • watchfiles
  • watchgod
  • websockets

@@ -1,4 +1,7 @@
# pypi as new as possible
bluesky-queueserver>=0.0.18
bloptools>=0.7.0
grpcio-tools>=1.62.2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this wasn't specifically for BEAMS, but maybe we also install py_trees? Or is that putting the cart before the horse?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you're totally right, let's do it

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 26, 2024

I will re-run this build once conda-forge has updated some more packages, possibly in the afternoon today

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 26, 2024

I'm going to do the matplotlib pinning thing to temporarily force a working build, with the expectation that I might be able to remove it once everything churns through conda-forge

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 26, 2024

Despite forcing us away from the most recent matplotlib builds and no longer picking up pyside6, I'm still getting a qt6-main dependency. I'm investigating by replicating the build offline.

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 26, 2024

I'm not sure how we got here yet, but qt6-main doesn't seem to interfere with the test suite (though pyside6 did, previously)

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

pip check's output is less than helpful right now because:

  • xraylib is invisible to it
  • several other packages have errors in their metadata

I'm going to keep the check in but stop making it fail the build so I can more easily track which things are passing and which are not

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

I think this is getting pretty close!
Tomorrow the conda forges will be up and this could potentially be finalized. No obvious big problems right now.
I still need to make the adjustment to shed the databroker/matplotlib pins once atef is ready on conda forge. We also are waiting on the pcdsdevices conda forge build but not for dependencies.

@tangkong
Copy link
Contributor

py3.12 readiness cites prettytable as a failure, but it actually installs just fine in a py3.12 environment. p4p is still working through some kinks, but has fixed the distutils problem that currently prevents installation (it just needs a tag)

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

Yeah I've got a sequencing bug in the CI build I think, where if the environment fails to build we still do some additional steps that also fail. This ends up manifesting as "no prettytable to build the release notes table" because the env doesn't exist, and then this gets reported as the "final" failure in the actions tab.

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

I also need to extend the readiness check to try a pip install on each package, it currently only runs through conda

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

At first glance it seems like the sequencing issue is better now- the py3.12 errors on the mamba/conda part and then doesn't attempt to build the table 🎉

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

current env and next incr will be broken because of strict repo priority wrt moving nabs to conda-forge, but we should ignore these
I will replace current env with the output of one of the py39-next-full builds and then things will be smoother

I will need to make a follow-up PR for the py311 update which will also switch us from mamba to conda+libmamba, cut the py39 and py310 builds, and update some things like ipython to new frozen versions

@ZLLentz ZLLentz mentioned this pull request Aug 27, 2024
@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

My intention is to take the output of this next build (if it passes) and use it as the new env

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

Another reason why py312 is failing now is that papermill pins down aiohttp very precisely to a specific version for py312 due to some incompatibility. Our security file forces a newer version of aiohttp for this pin because of a CVE, creating a conflict.

I suspect this will be resolved upstream at some point so I'm not going to keep tabs on it, I'll let the package maintainers keep track of which versions their packages do or do not work with.

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

Another good thing: the py312 readiness build now properly reports on the untagged p4p incompatibility:

Found uninstallable package p4p

…ll us which top-level req fails subdependnecy security conflicts
@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

I'll give it another try with a matplotlib<3.9 pin back in, somehow with this configuration (perhaps due to the opencv build spec?) we can get a random early matplotlib 3.9.1 build without the pyside6 dependency, but this feels fragile. At least one other dependency still requires matplotlib directly and I'll track this down later (but before the py3.11 release)

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 27, 2024

There's also a minor error in the CI's generation of yaml files

@ZLLentz ZLLentz changed the title WIP: pcds-5.9.0 ENH: pcds-5.9.0 Aug 28, 2024
@ZLLentz ZLLentz marked this pull request as ready for review August 28, 2024 01:58
tangkong
tangkong previously approved these changes Aug 28, 2024
Copy link
Contributor

@tangkong tangkong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I mostly have side comments, and I think most of this looks good 🎉

  • Appreciate you bringing the hype first with the new packages
  • what's the deal with importlib_metadata, importlib-metadata, and python's built in importlib.metadata. I don't think we (ECS) use all of these, but I see deps do. annoyingly (or maybe ingeniously?) the third party _ and - versions are the same package, made from the same feedstock
  • Removed packages revealed some crazy things we had installed (dataclasses? backports.functools_lru_cache???!)
  • Annoying how many conda feedstocks are just too old
  • The script / workflow changes all look great

source_extra = None
name_with_extra = req.name
else:
source_extra = str(req.marker).split(" ")[-1].strip('"').strip("'")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I spent some time trying to condense the strip calls but it's maybe less readable.

source_extra = str(req.marker).split(" ")[-1].strip('"\'')

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot that strip removes instances of each character in the string, rather than the full strings
Maybe a nitpick on top of a nitpick, but if we're going to combine it we should have the outer quotes be double to match the others

source_extra = str(req.marker).split(" ")[-1].strip("\"'")

I don't feel strongly about any of these variants

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This IPython output briefly broke my brain (testing syntax):

In [1]: text = "\"'"

In [2]: text
Out[2]: '"\''

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok I'm brain broken enough that I'll let the original stand as is, I like how much easier it is to read

Copy link
Contributor

@tangkong tangkong Aug 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep same, I really just meant to record my little code-golf diversion. It's definitely more readable as is

I think printing text in your example shows what you expect

In [6]: text = "\"'"

In [7]: print(text)
"'

scripts/release_notes_table.py Outdated Show resolved Hide resolved
coverage=7.4.1
# avoids pre-releases of v2
databroker<2.0.0
bluesky-base=1.10.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also pins bluesky (non-base), which has a strict bluesky-base pin. So the comment here makes sense 👍

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

what's the deal with importlib_metadata, importlib-metadata, and python's built in importlib.metadata. I don't think we (ECS) use all of these, but I see deps do. annoyingly (or maybe ingeniously?) the third party _ and - versions are the same package, made from the same feedstock

I'm going to learn about this and figure out what's going on
We use the built-in one only I think, and possibly only in pcds-envs itself

Removed packages revealed some crazy things we had installed (dataclasses? backports.functools_lru_cache???!)

We've been carrying a lot of stuff forward with the incremental update script, which by its nature doesn't clean up orphaned subdependencies. Running the env from scratch again allowed us to shed a lot of baggage, which is great! (We've also picked up some new baggage, but you can't win them all)

I'll do the two edits in one commit as to only incur one rerun of the suite, then I'll learn about the weird metadata packages

Co-authored-by: Robert Tang-Kong <[email protected]>
@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

I also was meaning to generate a new giant dependency tree graph, so I'll see about getting that made

@tangkong
Copy link
Contributor

tangkong commented Aug 28, 2024

The importlib{_, -}metadata packages are external dependencies of dependencies, I don't think we can do too much about them (at the risk of initiating another rabbit hole)

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

I just want to learn what they do in case we find them useful too

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

  • importlib_metadata was renamed from importlib-metadata at some point. They are the same package. On conda-forge, importlib-metadata is a codefree package that simply requires importlib_metadata at the current version.
  • importlib_metadata is a backport (or maybe the original source?) of all the most recent language features of importlib.metadata from the python standard library. For example, importlib_metadata at v7.0 is the same as importlib.metadata from python 3.13.
  • You're supposed to use importlib_metadata when you need a new feature from the standard library but must support older Python versions.

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

I did make a pipdeptree rendering of the environment but it is hilariously unreadable while also being incomplete because of the blending of conda and pypi

@ZLLentz
Copy link
Member Author

ZLLentz commented Aug 28, 2024

Ok I think this is more or less good to go- I'm just going to check all the link destinations and fix any broken ones, and add inbetween tag links as appropriate

@ZLLentz ZLLentz merged commit 229894c into pcdshub:master Aug 28, 2024
6 of 9 checks passed
@ZLLentz ZLLentz deleted the rel-5.9.0 branch August 28, 2024 21:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add ghapi check_py_compat.sh only considers conda packages Add shapely package Add blop(tools)
2 participants