fix: add libc.so fallback for musl systems to the ctypes impl#725
Conversation
|
For completeness, the Gentoo bug is https://bugs.gentoo.org/923003 and the upstream CPython bug is python/cpython#65821. |
|
Hello, does it mean that the pure Python version of psycopg just doesn't work on musl? I would like to see it tested in CI. The change you provided has broken the tests. Are you able to provide something working? |
Yes, or at least on vanilla musl+CPython. It is possible that some distributions are patching musl and/or CPython to make
I don't think GitHub Actions support any musl-backed setup.
Could you be more specific? Give that I'll update the code per the suggestion. |
I think you can ask Github Actions to use an arbitrary Docker container, but then some action-stuff like the Python setup may not work, see e.g. https://github.com/Jannik2099/pms-utils/blob/main/.github/workflows/alpine.yml. But Alpine patches their musl, so this bug wouldn't have shown up there anyway. We'd need to do a Gentoo image. If @dvarrazzo would like me to spend time on that, I can look into it. But it won't be super fast either (I can try my best to make it not-slow, but I can't guarantee it'll only be <5 minutes or something). |
Ah, I didn't notice that the world is on fire. Master was working as of yesterday. I'll check what's up with it. |
I understand, I identified musl == alpine but of course they are two different things. Nevermind then, I don't want to add other element to the test matrix, it's already slow enough as it is. |
Add a fallback to `libc.so` library name to fix loading the ctypes
implementation on musl systems. On musl, `find_library("c")` does
not work (the problem has been reported to CPython in 2014, and has not
been resolved yet), causing the module to fail on `assert libcname`.
Instead, add a fallback to using `libc.so` and let ctypes raise
an exception if such a library does not exist.
8402731 to
46381be
Compare
|
I have rebased your branch after fixing master, and added a release note entry. As soon as tests pass I will merge your PR and will release 3.1.18 including this fix in the next few days. Thank you for your contribution! |
|
Thanks a lot! |
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.1.15 to 3.1.18. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/psycopg/psycopg/blob/master/docs/news.rst">psycopg's changelog</a>.</em></p> <blockquote> <p>.. currentmodule:: psycopg</p> <p>.. index:: single: Release notes single: News</p> <h1><code>psycopg</code> release notes</h1> <h2>Future releases</h2> <p>Psycopg 3.2 (unreleased) ^^^^^^^^^^^^^^^^^^^^^^^^</p> <ul> <li>Add support for integer, floating point, boolean <code>NumPy scalar types</code>__ (:ticket:<code>[#332](https://github.com/psycopg/psycopg/issues/332)</code>).</li> <li>Add <code>!timeout</code> and <code>!stop_after</code> parameters to <code>Connection.notifies()</code> (:ticket:<code>340</code>).</li> <li>Add :ref:<code>raw-query-cursors</code> to execute queries using placeholders in PostgreSQL format (<code>$1</code>, <code>$2</code>...) (:ticket:<code>[#560](https://github.com/psycopg/psycopg/issues/560)</code>).</li> <li>Add <code>~rows.scalar_row</code> to return scalar values from a query (:ticket:<code>[#723](https://github.com/psycopg/psycopg/issues/723)</code>).</li> <li>Add <code>~Connection.set_autocommit()</code> on sync connections, and similar transaction control methods available on the async connections.</li> <li>Add support for libpq functions to close prepared statements and portals introduced in libpq v17 (:ticket:<code>[#603](https://github.com/psycopg/psycopg/issues/603)</code>).</li> <li>The <code>!context</code> parameter of <code>sql</code> objects <code>~sql.Composable.as_string()</code> and <code>~sql.Composable.as_bytes()</code> methods is now optional (:ticket:<code>[#716](https://github.com/psycopg/psycopg/issues/716)</code>).</li> <li>Disable receiving more than one result on the same cursor in pipeline mode, to iterate through <code>~Cursor.nextset()</code>. The behaviour was different than in non-pipeline mode and not totally reliable (:ticket:<code>[#604](https://github.com/psycopg/psycopg/issues/604)</code>). The <code>Cursor</code> now only preserves the results set of the last <code>~Cursor.execute()</code>, consistently with non-pipeline mode.</li> </ul> <p>.. __: <a href="https://numpy.org/doc/stable/reference/arrays.scalars.html#built-in-scalar-types">https://numpy.org/doc/stable/reference/arrays.scalars.html#built-in-scalar-types</a></p> <h2>Current release</h2> <p>Psycopg 3.1.18 ^^^^^^^^^^^^^^</p> <ul> <li>Fix possible deadlock on pipeline exit (:ticket:<code>[#685](https://github.com/psycopg/psycopg/issues/685)</code>).</li> <li>Fix overflow loading large intervals in C module (:ticket:<code>[#719](https://github.com/psycopg/psycopg/issues/719)</code>).</li> <li>Fix compatibility with musl libc distributions affected by <code>CPython issue [#65821](https://github.com/psycopg/psycopg/issues/65821)</code>__ (:ticket:<code>[#725](https://github.com/psycopg/psycopg/issues/725)</code>).</li> </ul> <p>.. __: <a href="https://redirect.github.com/python/cpython/issues/65821">python/cpython#65821</a></p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/psycopg/psycopg/commit/8585a23fcd7bcf75193adbc10d3005752ba8f15f"><code>8585a23</code></a> chore: bump psycopg package version to 3.1.18</li> <li><a href="https://github.com/psycopg/psycopg/commit/ab646b70c82aafe6004064a40a3ba358142999a3"><code>ab646b7</code></a> fix(c): drop spurious loop break in pipeline_communicate</li> <li><a href="https://github.com/psycopg/psycopg/commit/bebfe97f934c9136e4db52709ac0fb4dd9cae64d"><code>bebfe97</code></a> chore: bump cibuildwheel version</li> <li><a href="https://github.com/psycopg/psycopg/commit/89394a6f36d42d308a8e672e9b5deef8e76254ae"><code>89394a6</code></a> chore: bump checkout action to v4</li> <li><a href="https://github.com/psycopg/psycopg/commit/ed579e51ca9b44af148e55d345e312f58ce12a6f"><code>ed579e5</code></a> docs: fix tickets format</li> <li><a href="https://github.com/psycopg/psycopg/commit/d4a4e8e1447de3446f614a29a8274ef7c4d03d64"><code>d4a4e8e</code></a> Merge branch 'musl-ctypes' into maint-3.1</li> <li><a href="https://github.com/psycopg/psycopg/commit/8bc51e6812cfaedebdd7afff7c86be301d5fbf66"><code>8bc51e6</code></a> docs: mention musl-ctypes workaround in news file</li> <li><a href="https://github.com/psycopg/psycopg/commit/afb040a800b2667a07dc441e8cdb94e55a0dcf65"><code>afb040a</code></a> fix: add <code>libc.so</code> fallback for musl systems to the ctypes impl</li> <li><a href="https://github.com/psycopg/psycopg/commit/06ef0d92109a63fa1a7630804a3a26af0e0a39c9"><code>06ef0d9</code></a> test: drop ineffective marker on fixture</li> <li><a href="https://github.com/psycopg/psycopg/commit/b955118e523c84f5f702d93fd74288ce51ff61db"><code>b955118</code></a> Merge branch 'fix-interval-overflow' into maint-3.1</li> <li>Additional commits viewable in <a href="https://github.com/psycopg/psycopg/compare/3.1.15...3.1.18">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Eduard van Valkenburg <eavanvalkenburg@users.noreply.github.com> Co-authored-by: Evan Mattson <35585003+moonbox3@users.noreply.github.com>
Bumps [psycopg](https://github.com/psycopg/psycopg) from 3.1.15 to 3.1.18. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/psycopg/psycopg/blob/master/docs/news.rst">psycopg's changelog</a>.</em></p> <blockquote> <p>.. currentmodule:: psycopg</p> <p>.. index:: single: Release notes single: News</p> <h1><code>psycopg</code> release notes</h1> <h2>Future releases</h2> <p>Psycopg 3.2 (unreleased) ^^^^^^^^^^^^^^^^^^^^^^^^</p> <ul> <li>Add support for integer, floating point, boolean <code>NumPy scalar types</code>__ (:ticket:<code>[microsoft#332](https://github.com/psycopg/psycopg/issues/332)</code>).</li> <li>Add <code>!timeout</code> and <code>!stop_after</code> parameters to <code>Connection.notifies()</code> (:ticket:<code>340</code>).</li> <li>Add :ref:<code>raw-query-cursors</code> to execute queries using placeholders in PostgreSQL format (<code>$1</code>, <code>$2</code>...) (:ticket:<code>[microsoft#560](https://github.com/psycopg/psycopg/issues/560)</code>).</li> <li>Add <code>~rows.scalar_row</code> to return scalar values from a query (:ticket:<code>[microsoft#723](https://github.com/psycopg/psycopg/issues/723)</code>).</li> <li>Add <code>~Connection.set_autocommit()</code> on sync connections, and similar transaction control methods available on the async connections.</li> <li>Add support for libpq functions to close prepared statements and portals introduced in libpq v17 (:ticket:<code>[microsoft#603](https://github.com/psycopg/psycopg/issues/603)</code>).</li> <li>The <code>!context</code> parameter of <code>sql</code> objects <code>~sql.Composable.as_string()</code> and <code>~sql.Composable.as_bytes()</code> methods is now optional (:ticket:<code>[microsoft#716](https://github.com/psycopg/psycopg/issues/716)</code>).</li> <li>Disable receiving more than one result on the same cursor in pipeline mode, to iterate through <code>~Cursor.nextset()</code>. The behaviour was different than in non-pipeline mode and not totally reliable (:ticket:<code>[microsoft#604](https://github.com/psycopg/psycopg/issues/604)</code>). The <code>Cursor</code> now only preserves the results set of the last <code>~Cursor.execute()</code>, consistently with non-pipeline mode.</li> </ul> <p>.. __: <a href="https://numpy.org/doc/stable/reference/arrays.scalars.html#built-in-scalar-types">https://numpy.org/doc/stable/reference/arrays.scalars.html#built-in-scalar-types</a></p> <h2>Current release</h2> <p>Psycopg 3.1.18 ^^^^^^^^^^^^^^</p> <ul> <li>Fix possible deadlock on pipeline exit (:ticket:<code>[microsoft#685](https://github.com/psycopg/psycopg/issues/685)</code>).</li> <li>Fix overflow loading large intervals in C module (:ticket:<code>[microsoft#719](https://github.com/psycopg/psycopg/issues/719)</code>).</li> <li>Fix compatibility with musl libc distributions affected by <code>CPython issue [#65821](https://github.com/psycopg/psycopg/issues/65821)</code>__ (:ticket:<code>[microsoft#725](https://github.com/psycopg/psycopg/issues/725)</code>).</li> </ul> <p>.. __: <a href="https://redirect.github.com/python/cpython/issues/65821">python/cpython#65821</a></p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/psycopg/psycopg/commit/8585a23fcd7bcf75193adbc10d3005752ba8f15f"><code>8585a23</code></a> chore: bump psycopg package version to 3.1.18</li> <li><a href="https://github.com/psycopg/psycopg/commit/ab646b70c82aafe6004064a40a3ba358142999a3"><code>ab646b7</code></a> fix(c): drop spurious loop break in pipeline_communicate</li> <li><a href="https://github.com/psycopg/psycopg/commit/bebfe97f934c9136e4db52709ac0fb4dd9cae64d"><code>bebfe97</code></a> chore: bump cibuildwheel version</li> <li><a href="https://github.com/psycopg/psycopg/commit/89394a6f36d42d308a8e672e9b5deef8e76254ae"><code>89394a6</code></a> chore: bump checkout action to v4</li> <li><a href="https://github.com/psycopg/psycopg/commit/ed579e51ca9b44af148e55d345e312f58ce12a6f"><code>ed579e5</code></a> docs: fix tickets format</li> <li><a href="https://github.com/psycopg/psycopg/commit/d4a4e8e1447de3446f614a29a8274ef7c4d03d64"><code>d4a4e8e</code></a> Merge branch 'musl-ctypes' into maint-3.1</li> <li><a href="https://github.com/psycopg/psycopg/commit/8bc51e6812cfaedebdd7afff7c86be301d5fbf66"><code>8bc51e6</code></a> docs: mention musl-ctypes workaround in news file</li> <li><a href="https://github.com/psycopg/psycopg/commit/afb040a800b2667a07dc441e8cdb94e55a0dcf65"><code>afb040a</code></a> fix: add <code>libc.so</code> fallback for musl systems to the ctypes impl</li> <li><a href="https://github.com/psycopg/psycopg/commit/06ef0d92109a63fa1a7630804a3a26af0e0a39c9"><code>06ef0d9</code></a> test: drop ineffective marker on fixture</li> <li><a href="https://github.com/psycopg/psycopg/commit/b955118e523c84f5f702d93fd74288ce51ff61db"><code>b955118</code></a> Merge branch 'fix-interval-overflow' into maint-3.1</li> <li>Additional commits viewable in <a href="https://github.com/psycopg/psycopg/compare/3.1.15...3.1.18">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Eduard van Valkenburg <eavanvalkenburg@users.noreply.github.com> Co-authored-by: Evan Mattson <35585003+moonbox3@users.noreply.github.com>
Add a fallback to
libc.solibrary name to fix loading the ctypes implementation on musl systems. On musl,find_library("c")does not work (the problem has been reported to CPython in 2014, and has not been resolved yet), causing the module to fail onassert libcname. Instead, add a fallback to usinglibc.soand let ctypes raise an exception if such a library does not exist.