bootstrap.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """
  2. If setuptools is not already installed in the environment, it's not possible
  3. to invoke setuptools' own commands. This routine will bootstrap this local
  4. environment by creating a minimal egg-info directory and then invoking the
  5. egg-info command to flesh out the egg-info directory.
  6. """
  7. import os
  8. import sys
  9. import textwrap
  10. import subprocess
  11. minimal_egg_info = textwrap.dedent("""
  12. [distutils.commands]
  13. egg_info = setuptools.command.egg_info:egg_info
  14. [distutils.setup_keywords]
  15. include_package_data = setuptools.dist:assert_bool
  16. install_requires = setuptools.dist:check_requirements
  17. extras_require = setuptools.dist:check_extras
  18. entry_points = setuptools.dist:check_entry_points
  19. [egg_info.writers]
  20. dependency_links.txt = setuptools.command.egg_info:overwrite_arg
  21. entry_points.txt = setuptools.command.egg_info:write_entries
  22. requires.txt = setuptools.command.egg_info:write_requirements
  23. """)
  24. def ensure_egg_info():
  25. if os.path.exists('setuptools.egg-info'):
  26. return
  27. print("adding minimal entry_points")
  28. build_egg_info()
  29. def build_egg_info():
  30. """
  31. Build a minimal egg-info, enough to invoke egg_info
  32. """
  33. os.mkdir('setuptools.egg-info')
  34. with open('setuptools.egg-info/entry_points.txt', 'w') as ep:
  35. ep.write(minimal_egg_info)
  36. def run_egg_info():
  37. cmd = [sys.executable, 'setup.py', 'egg_info']
  38. print("Regenerating egg_info")
  39. subprocess.check_call(cmd)
  40. print("...and again.")
  41. subprocess.check_call(cmd)
  42. if __name__ == '__main__':
  43. ensure_egg_info()
  44. run_egg_info()