Hi, On Sat, Apr 6, 2019 at 11:16 PM Bert JW Regeer <xiste...@0x58.com> wrote: > > > > On Apr 6, 2019, at 23:10, Nathaniel Smith <n...@pobox.com> wrote: > > On Sat, Apr 6, 2019 at 2:14 PM Bert JW Regeer <xiste...@0x58.com> wrote: > > > Hey all, > > You may have seen some hub hub around psycopg2 and no longer shipping binary > wheels by default [1][2] (and in fact using psycopg2-binary if you want > wheels), and I wanted to bring it up here because it demonstrates a problem > area with the current state of packaging in Python: > > There is no good way for a new package to specify that it provides what > another package would provide, and setuptools currently checks that all > distributions are found before running the console scripts (so if a console > script has a setup.py that depends on psycopg2 and you install > psycopg2-binary it fails) [3] > > So currently if you pip install psycopg2-binary and then install a project > that uses psycopg2 as a dependency it will install psycopg2 over top of > psycopg2-binary. > > The author of psycopg2 stopped distributing binaries for psycopg2 because of > issues with the version of SSL that Python was compiled for/what was used by > psycopg2 and it causing all kinds of issues. > > I don't have a proposal or a fix, but this is going to be an issue not just > for psycopg2 but also for other projects that potentially distribute wheels > that are built against a different version of OpenSSL. > > I see two things that should get some thought: > > 1. How to have a package provide for another package (there are keywords but > AFAIK they are currently ignored by pip) > 2. How to handle/deal with shared libraries that are not versioned > > > The psycopg2 authors originally misdiagnosed the problem, and haven't > updated their docs since the problem was diagnosed further, so a lot > of people are confused about this whole psycopg2-binary thing :-( > > There is no problem with shipping openssl in wheels. Lots of projects > do it fine. The reason psycopg2 is having problems is because of an > easily-fixable bug in psycopg2: > > - Old versions of OpenSSL need some annoying configuration applied to > make them thread-safe > - libpq (which psycopg2 uses) normally does this configuration in one way > - the Python ssl module also normally does this configuration in a different > way > - If libpq and the stdlib ssl module are both linked against the > *same* copy of openssl, then they can end up fighting with each other > - So the psycopg2 code has a special hack to unconditionally disable > libpq's thread-safety code, because the psycopg2 developers assumed > that psycopg2 and the stdlib ssl would *always* share the same copy of > openssl, and the stdlib ssl module would take care of the > thread-safety stuff > - Then they started distributing psycopg2 binaries with their own copy > of openssl in them, and of course they got crashes, because they've > turned off thread-safety, and now that they have their own copy of > openssl, no-one else is fixing it for them > > So all they need to do to fix their wheels is either: > > - somehow disable this patch in their wheel builds: > https://github.com/psycopg/psycopg2/commit/a59704cf93e8594dfe59cf12d416e82a816953a4 > > Or else: > > - switch to building their wheels against a newer version of openssl, > since newer versions of openssl are now thread-safe by default (thank > goodness) > > Either way, it's totally fixable, and only the psycopg2 devs can fix it.
I don't work on psychopg2, nor do I understand the threading issues, but I offered to help, current status here: https://github.com/psycopg/psycopg2-wheels/pull/8 Cheers, Matthew -- Distutils-SIG mailing list -- distutils-sig@python.org To unsubscribe send an email to distutils-sig-le...@python.org https://mail.python.org/mailman3/lists/distutils-sig.python.org/ Message archived at https://mail.python.org/archives/list/distutils-sig@python.org/message/B5ODINILHMPXH4LLSOHDQNOKF5YHKANC/