11import os
22import glob
3+ import sys
34
45from typing import Set
56
1314
1415def pkg_resources_style_namespace_packages (extracted_whl_directory ) -> Set [str ]:
1516 """
17+ Discovers namespace packages implemented using the 'pkg_resources-style namespace packages' method.
18+
1619 "While this approach is no longer recommended, it is widely present in most existing namespace packages." - PyPA
1720 See https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages
1821 """
@@ -37,7 +40,17 @@ def pkg_resources_style_namespace_packages(extracted_whl_directory) -> Set[str]:
3740 return namespace_pkg_dirs
3841
3942
43+ def native_namespace_packages_supported () -> bool :
44+ return (sys .version_info .major , sys .version_info .minor ) >= (3 , 3 )
45+
46+
4047def implicit_namespace_packages (directory , ignored_dirnames = None ) -> Set [str ]:
48+ """
49+ Discovers namespace packages implemented using the 'native namespace packages' method,
50+ AKA 'implicit namespace packages', which has been supported since Python 3.3.
51+
52+ See: https://packaging.python.org/guides/packaging-namespace-packages/#native-namespace-packages
53+ """
4154 namespace_pkg_dirs = set ()
4255 for dirpath , dirnames , filenames in os .walk (directory , topdown = True ):
4356 # We are only interested in dirs with no init file
@@ -60,7 +73,11 @@ def implicit_namespace_packages(directory, ignored_dirnames=None) -> Set[str]:
6073
6174
6275def add_pkgutil_style_namespace_pkg_init (dir_path : str ) -> None :
63- """TODO"""
76+ """
77+ Used to implement the 'pkgutil-style namespace packages' method of
78+ doing namespace packages.
79+ See: https://packaging.python.org/guides/packaging-namespace-packages/#pkgutil-style-namespace-packages
80+ """
6481 ns_pkg_init_filepath = os .path .join (dir_path , "__init__.py" )
6582
6683 if os .path .isfile (ns_pkg_init_filepath ):
0 commit comments