1
0

namespaces.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import textwrap
  2. def build_namespace_package(tmpdir, name):
  3. src_dir = tmpdir / name
  4. src_dir.mkdir()
  5. setup_py = src_dir / 'setup.py'
  6. namespace, sep, rest = name.partition('.')
  7. script = textwrap.dedent("""
  8. import setuptools
  9. setuptools.setup(
  10. name={name!r},
  11. version="1.0",
  12. namespace_packages=[{namespace!r}],
  13. packages=[{namespace!r}],
  14. )
  15. """).format(**locals())
  16. setup_py.write_text(script, encoding='utf-8')
  17. ns_pkg_dir = src_dir / namespace
  18. ns_pkg_dir.mkdir()
  19. pkg_init = ns_pkg_dir / '__init__.py'
  20. tmpl = '__import__("pkg_resources").declare_namespace({namespace!r})'
  21. decl = tmpl.format(**locals())
  22. pkg_init.write_text(decl, encoding='utf-8')
  23. pkg_mod = ns_pkg_dir / (rest + '.py')
  24. some_functionality = 'name = {rest!r}'.format(**locals())
  25. pkg_mod.write_text(some_functionality, encoding='utf-8')
  26. return src_dir
  27. def make_site_dir(target):
  28. """
  29. Add a sitecustomize.py module in target to cause
  30. target to be added to site dirs such that .pth files
  31. are processed there.
  32. """
  33. sc = target / 'sitecustomize.py'
  34. target_str = str(target)
  35. tmpl = '__import__("site").addsitedir({target_str!r})'
  36. sc.write_text(tmpl.format(**locals()), encoding='utf-8')