rules_pip icon indicating copy to clipboard operation
rules_pip copied to clipboard

Unable to handle namespace packages like azure and google

Open BenMatase opened this issue 5 years ago • 1 comments

When using these rules with a family of pip packages (e.g. azure and google packages) which install as part of the same "namespace", python is unable to import them at runtime.

For example, if I try to use azure-mgmt-compute which provides the azure.mgmt.compute module and azure-mgmt-resource which provides the azure.mgmt.resource module, I run into this issue since they both install into the azure top level module. My pylint rules complain

ben.py:10:0: E0611: No name 'mgmt' in module 'azure' (no-name-in-module)
ben.py:10:0: E0401: Unable to import 'azure.mgmt' (import-error)

as well as when I go to actually run the packaged up par:

  File "path/to/file/ben.py", line 14, in <module>
    from azure.mgmt import compute, network, resource
ModuleNotFoundError: No module named 'azure.mgmt'

The build of the target succeeds, so only at run time does it fail.

I've found that this seems to be a known issue with bazel's rules_python which I found through this issue which I found through this issue (where this rule set is said to possibly fix this issue).

The repo for rules_python_external seems to have solved this issue and after doing some digging, it looks like they handle this by detecting and treating those "namespace" packages on wheel extraction.

BenMatase avatar Jun 15 '20 17:06 BenMatase

I can do the work and try and fix this in this repo, but could use some pointers

BenMatase avatar Jun 15 '20 17:06 BenMatase