vmware / vsphere-automation-sdk-python

Python samples, language bindings, and API reference documentation for vSphere, VMC, and NSX-T using the VMware REST API
MIT License
745 stars 313 forks source link

Use "com" folder as an implicit namespace #408

Closed mxmrlt closed 3 months ago

mxmrlt commented 8 months ago

Describe the bug

While using this package as a dependency it is impossible to use another one which also has com folder in its source code.

The problem occurs mostly in editable installation mode.

These sub-packages contain an __init__.py file making fail any other packages with com.company namespace : vapi-common-client-.zip vcenter_bindings-.zip vmwarecloud_aws-.zip vmwarecloud_draas-.zip

The __init__.py file :

# Required to distribute different parts of this
# package as multiple distributables
try:
    import pkg_resources
    pkg_resources.declare_namespace(__name__)
except ImportError:
    from pkgutil import extend_path
    __path__ = extend_path(__path__, __name__)

There shouldn't be any __init__.py file in the "com" folder. This latter is "universal" and can be used by many others.

Reproduction steps

  1. pip install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git
  2. pip install --editable path-to-my-other-package-containing com.compagny namespace
  3. python -c "from com.company.mypackage.mymodule import my_function, my_class"
  4. Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named 'com.company'

Expected behavior

from com.company.mypackage.mymodule import my_function, my_class

should be possible.

Additional context

No response

kunalpmj commented 7 months ago

Hi @mxmrlt

This is an unfortunate case of "missing init.py trap". We are exploring the options like updating the SDK and its dependencies to use Implicit Namespace packages, removing "com" form namespace package etc. Once the approach is finalized, We will update the ticket with target dates by when the fix will be available.

Thanks Kunal

kunalpmj commented 4 months ago

The issue will be fixed in next SDK 8.0U3 release

kunalpmj commented 3 months ago

8.0U3 is released. Closing the issue