Issue
In Python 3, modules can be namespace modules without an __init__.py (as per PEP 420) or as a regular module (i.e. '[modules] packages as they are implemented in Python 3.2 and earlier' - PEP 420) that have an __init__.py or are a single .py file.
How can you tell the difference between a namespace module and an 'ordinary' module?
(I am using Python 3.5.3)
e.g.
Namespace module named mod prints out as:
(Pdb) mod
<module 'mymodule' (namespace)>
and ordinary modules print out as:
(Pdb) mod
<module 'mymodule' from '/path/to/mymodule/__init__.py'>
Solution
Namespace packages have a __path__, and either __file__ set to None or no __file__ attribute. (__file__ is set to None on Python 3.7 and later; previously, it was unset.)
if hasattr(mod, '__path__') and getattr(mod, '__file__', None) is None:
print("It's a namespace package.")
In contrast, modules that aren't packages don't have a __path__, and packages that aren't namespace packages have __file__ set to the location of their __init__.py.
Answered By - user2357112 Answer Checked By - Timothy Miller (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.