fix: Handle single-file module pypi-deps in py_pex_binary
Addresses the bug in https://github.com/aspect-build/rules_py/issues/391.
Single-file modules such as six and typing-extensions does not work with the current py_pex_binary rule, since it's assumed that there exist a sub-directory within site-packages that is not dist-info.
An example of what a single-file module pypi-dep looks like:
ls bazel-reppro_pex_err/external/rules_python~~pip~pypi_311_six/site-packages/
__init__.py six-1.16.0.dist-info six.py
Since Distribution.load(..) takes in the site-packages directory, we only emit this part of the path, and let uniquify=True handle deduplication after _map_srcs is applied.
Changes are visible to end-users: no
Test plan
- Manual testing; please provide instructions so we can reproduce:
Add
sixto requirements and"@pypi_six//:pkg"as a dep to the py_pex_binary example; then importsixin py_pex_binary'ssay.py. Printing the module orcowsay.cow(f"{six}")shows that the previous example and single-files modules now also work.
Thanks! Would you be able to turn the manual test case into an automated one?
@thesayyn Can you take a look?
Thanks! Would you be able to turn the manual test case into an automated one?
Looks to be a bit more work than just adding a test case, as I don't see any tests for the py-pex-binary rule. I'll leave test automation up to you guys if that's okay
Could you also add a test for this?
@ekfeet could you rebase this?
Gave it a shot in a11b203
it seems to be failing due to host not having a specific version of python, could we just remove the interpreter constraints so it works with any version of python?
@ekfeet could you rebase this?
Rebased and ran bazel run //:gazelle_python_manifest.update
it seems to be failing due to host not having a specific version of python, could we just remove the interpreter constraints so it works with any version of python?
Like this https://github.com/aspect-build/rules_py/pull/392/commits/4765a62386efc98423eecd178a281b29202c18a6? Seems to work