We spent a ton of time on this for perspective, the end result is a mostly compatible set of wheels for most platforms, I believe we skipped py2 but nobody cares about those anyway. We link against libarrow and libarrow_python on Linux, on windows we vendor them all into our library. Feel free to scrape the perspective repo's cmake lists and setup.py for details.
Tim Paine tim.paine.nyc > On Jul 2, 2020, at 10:32, Uwe L. Korn <uw...@xhochy.com> wrote: > > I had so much fun with the wheels in the past, I'm now a happy member of > conda-forge core instead :D > > The good thing first: > > * The C++ ABI didn't change between the manylinux versions, it is the old one > in all cases. So you mix & match manylinux versions. > > The sad things: > > * The manylinuxX standard are intented to provide a way to ship > *self-contained* wheels that run on any recent Linux. The important part here > is that they need to be self-contained. Having a binary dependency on another > wheel is actually not allowed. > * Thus the snowflake-python-connector ships the libarrow.so it was build with > as part of its wheel. In this case auditwheel is happy with the wheel. > * It is working with numpy as a dependency because NumPy linkage is similar > to the import lib behaviour on Windows: You don't actually link against numpy > but you statically link a set of functions that are resolved to NumPy's > function when you import numpy. Quick googling leads to > https://github.com/yugr/Implib.so which could provide something similar for > Linux. > * You could actually omit linking to libarrow and try to populate the symbols > before you load the library. This is how the Python symbols are available to > extensions without linking to libpython. > > >> On Thu, Jul 2, 2020, at 2:43 PM, Maarten Breddels wrote: >> Ok, thanks! >> >> I'm setting up a repo with an example here, using pybind11: >> https://github.com/vaexio/vaex-arrow-ext >> >> and I'll just try all possible combinations and report back. >> >> cheers, >> >> Maarten Breddels >> Software engineer / consultant / data scientist >> Python / C++ / Javascript / Jupyter >> www.maartenbreddels.com / vaex.io >> maartenbredd...@gmail.com +31 6 2464 0838 <+31+6+24640838> >> [image: Twitter] <https://twitter.com/maartenbreddels>[image: Github] >> <https://github.com/maartenbreddels>[image: LinkedIn] >> <https://linkedin.com/in/maartenbreddels>[image: Skype] >> >> >> >> >> Op do 2 jul. 2020 om 14:32 schreef Joris Van den Bossche < >> jorisvandenboss...@gmail.com>: >> >>> Also no concrete answer, but one such example is turbodbc, I think. >>> But it seems they only have conda binary packages, and don't >>> distribute wheels .. >>> (https://turbodbc.readthedocs.io/en/latest/pages/getting_started.html), >>> so not that relevant as comparison (they also need to build against an >>> odbc driver in addition to arrow). >>> But maybe Uwe has some more experience in this regard (and with >>> attempts building wheels for turbodbc, eg >>> https://github.com/blue-yonder/turbodbc/pull/108). >>> >>> Joris >>> >>> On Thu, 2 Jul 2020 at 11:05, Antoine Pitrou <anto...@python.org> wrote: >>>> >>>> >>>> Hi Maarten, >>>> >>>> Le 02/07/2020 à 10:53, Maarten Breddels a écrit : >>>>> >>>>> Also, I see pyarrow distributes manylinux1/2010/2014 wheels. Would a >>> vaex >>>>> extension distributed as a 2010 wheel, and build with the pyarrow 2010 >>>>> wheel, work in an environment where someone installed a pyarrow 2014 >>>>> wheel, or build from source, or installed from conda-forge? >>>> >>>> I have no idea about the concrete answer, but it probably depends >>>> whether the libstdc++ ABI changed between those two versions. I'm >>>> afraid you'll have to experiment yourself. >>>> >>>> (if you want to eschew C++ ABI issues, you may use the C Data Interface: >>>> https://arrow.apache.org/docs/format/CDataInterface.html >>>> though of course you won't have access to all the useful helpers in the >>>> Arrow C++ library) >>>> >>>> Regards >>>> >>>> Antoine. >>>> >>>> >>> >>