| """ |
| If setuptools is not already installed in the environment, it's not possible |
| to invoke setuptools' own commands. This routine will bootstrap this local |
| environment by creating a minimal egg-info directory and then invoking the |
| egg-info command to flesh out the egg-info directory. |
| """ |
| |
| from __future__ import unicode_literals |
| |
| import os |
| import sys |
| import textwrap |
| import subprocess |
| import io |
| |
| |
| minimal_egg_info = textwrap.dedent(""" |
| [distutils.commands] |
| egg_info = setuptools.command.egg_info:egg_info |
| |
| [distutils.setup_keywords] |
| include_package_data = setuptools.dist:assert_bool |
| install_requires = setuptools.dist:check_requirements |
| extras_require = setuptools.dist:check_extras |
| entry_points = setuptools.dist:check_entry_points |
| |
| [egg_info.writers] |
| dependency_links.txt = setuptools.command.egg_info:overwrite_arg |
| entry_points.txt = setuptools.command.egg_info:write_entries |
| requires.txt = setuptools.command.egg_info:write_requirements |
| """) |
| |
| |
| def ensure_egg_info(): |
| if os.path.exists('setuptools.egg-info'): |
| return |
| print("adding minimal entry_points") |
| build_egg_info() |
| |
| |
| def build_egg_info(): |
| """ |
| Build a minimal egg-info, enough to invoke egg_info |
| """ |
| |
| os.mkdir('setuptools.egg-info') |
| with io.open('setuptools.egg-info/entry_points.txt', 'w') as ep: |
| ep.write(minimal_egg_info) |
| |
| |
| def run_egg_info(): |
| cmd = [sys.executable, 'setup.py', 'egg_info'] |
| print("Regenerating egg_info") |
| subprocess.check_call(cmd) |
| print("...and again.") |
| subprocess.check_call(cmd) |
| |
| |
| def main(): |
| ensure_egg_info() |
| run_egg_info() |
| |
| |
| __name__ == '__main__' and main() |