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

Switch to psycopg2 from wheel-only psycopg2-binary #625

Merged

Conversation

DavidCain
Copy link
Contributor

This closes #623

Per the authors of the psycopg2 package, psycopg2-binary "is meant
for beginners to start playing with Python and PostgreSQL without the
need to meet the build requirements."

However, it's preferable to depend on psycopg2 for production software.


See issue 623 (or the commit in this PR) for more context.

This closes biocommons#623

Per the authors of the `psycopg2` package, `psycopg2-binary` "is meant
for beginners to start playing with Python and PostgreSQL without the
need to meet the build requirements."

However, it's preferable to depend on `psycopg2` for production software.

Issues in flight which should make this change irrelevant
---------------------------------------------------------

- [make data provider dependencies optional][hgvs-optional-deps]
- [replace psycopg2 with asyncpg][hgvs-asyncpg]
- [use a REST interface, eliminating libpq dependency][hgvs-rest]

------------------------------------------------------------------------

Why move away from `psycopg2-binary`?
=====================================
The psycopg2 project makes two recommendations in the
[psycopg2 vs psycopg2-binary][psycopg2-vs-psycopg2-binary] docs:

> If you are the maintainer of a published package depending on `psycopg2` you
> shouldn’t use `psycopg2-binary` as a module dependency.

Secondarily:

> **For production use you are advised to use the source distribution.**

This means that any production software depending on `hgvs` will have to
install `psycopg2-binary`.

History of the two packages
===========================
Starting with Psycopg2 2.8, there are now two packages (explained in the
[2.7.4 release notes][psycopg2-274]):

- `psycopg2`: source distribution, advised for production.
- `psycopg2-binary`: "quickest way to install" (a "pre-compiled binary version")

There is substantial discussion in [an issue on the `psycopg2` project][gh-thread],
which I won't re-summarize here, but one takeaway is that many Python packages
now depend on `psycopg2-binary`, and others on `psycopg2`.

Ideally, all libraries just depend on `psycopg2`.

Alternate solutions to the split exist (like [`Provides-Dist` from PEP 345][provides-dist]).
However, the [`Provides-Dist` field is "rarely used"][provides-dist-rarely-used]
and thus ignored most of the time.

[`hgvs` switched to `psycopg2-binary`][hgvs-switch-to-binary] shortly after the 2.7.4 release.

[gh-thread]: psycopg/psycopg2#674
[hgvs-asyncpg]: biocommons#603
[hgvs-optional-deps]: biocommons#199
[hgvs-rest]: biocommons#199 (comment)
[hgvs-switch-to-binary]: biocommons@4c75a4e5
[provides-dist-rarely-used]: https://packaging.python.org/specifications/core-metadata/#provides-dist-multiple-use
[provides-dist]: https://www.python.org/dev/peps/pep-0345/#provides-dist-multiple-use
[psycopg2-274]: https://www.psycopg.org/articles/2018/02/08/psycopg-274-released/
[psycopg2-vs-psycopg2-binary]: https://www.psycopg.org/docs/install.html#psycopg-vs-psycopg-binary
@DavidCain
Copy link
Contributor Author

@reece - apologies, I couldn't tell where to add notes about this change for any upcoming release.

I'm very happy to add a one-line summary or similar if there's a best place (in docs/changelog maybe?).

@reece reece merged commit 18d8dc9 into biocommons:main Sep 25, 2021
@reece
Copy link
Member

reece commented Sep 25, 2021

Thanks @DavidCain. I assemble the changelog from commits when I do a release. (Its semi-documented in docs/contributing.rst.)

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.

Depend on psycopg2 rather than psycopg2-binary
2 participants