diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2017-01-01 23:12:23 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2017-01-01 23:12:23 -0500 |
commit | a36dbf75bd6b1283fd3da28c25fd583f20025c36 (patch) | |
tree | 4fbcdbf895a2425678791a230f5c08e9c25d5365 | |
parent | ff371f18f0076bc63da05334f7e551c1cc29e10d (diff) | |
download | python-setuptools-git-a36dbf75bd6b1283fd3da28c25fd583f20025c36.tar.gz |
In the bootstrap script, generate a requirements.txt file and use it to install the dependencies just in time to make them available long enough to generate the egg info.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | bootstrap.py | 40 |
3 files changed, 39 insertions, 4 deletions
@@ -13,3 +13,4 @@ setuptools.egg-info *.swp *~ .hg* +requirements.txt diff --git a/.travis.yml b/.travis.yml index cb8cae90..210926df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ script: - env # update egg_info based on setup.py in checkout - - rwt -- bootstrap.py + - python bootstrap.py - tox diff --git a/bootstrap.py b/bootstrap.py index 761b8dfc..705a8720 100644 --- a/bootstrap.py +++ b/bootstrap.py @@ -5,13 +5,18 @@ environment by creating a minimal egg-info directory and then invoking the egg-info command to flesh out the egg-info directory. """ -__requires__ = ['packaging', 'six', 'appdirs'] - import os +import io +import re +import contextlib +import tempfile +import shutil import sys import textwrap import subprocess +import pip + minimal_egg_info = textwrap.dedent(""" [distutils.commands] egg_info = setuptools.command.egg_info:egg_info @@ -54,6 +59,35 @@ def run_egg_info(): subprocess.check_call(cmd) +def gen_deps(): + with io.open('setup.py', encoding='utf-8') as strm: + text = strm.read() + pattern = r'install_requires=\[(.*?)\]' + match = re.search(pattern, text, flags=re.M|re.DOTALL) + reqs = eval(match.group(1).replace('\n', '')) + with io.open('requirements.txt', 'w', encoding='utf-8') as reqs_file: + reqs_file.write('\n'.join(reqs)) + + +@contextlib.contextmanager +def install_deps(): + "Just in time make the deps available" + gen_deps() + tmpdir = tempfile.mkdtemp() + args = [ + 'install', + '-t', tmpdir, + '-r', 'requirements.txt', + ] + pip.main(args) + os.environ['PYTHONPATH'] = tmpdir + try: + yield tmpdir + finally: + shutil.rmtree(tmpdir) + + if __name__ == '__main__': ensure_egg_info() - run_egg_info() + with install_deps(): + run_egg_info() |