|
|
|
@ -6,6 +6,8 @@ from subprocess import check_call, check_output |
|
|
|
from sys import argv |
|
|
|
from tempfile import TemporaryDirectory |
|
|
|
|
|
|
|
TARGETS = ['', 'dev', 'docs'] # the empty string is used for the project itself |
|
|
|
|
|
|
|
|
|
|
|
def print_packages(packages, heading): |
|
|
|
print(f'{heading}:') |
|
|
|
@ -25,34 +27,28 @@ with open('setup.py') as fh: |
|
|
|
with TemporaryDirectory() as tmpdir: |
|
|
|
check_call(['python3', '-m', 'venv', tmpdir]) |
|
|
|
|
|
|
|
# base needs |
|
|
|
check_call([join(tmpdir, 'bin', 'pip'), 'install', '.']) |
|
|
|
frozen = check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) |
|
|
|
frozen = set(frozen.decode('utf-8').strip().split('\n')) |
|
|
|
|
|
|
|
# dev additions |
|
|
|
check_call([join(tmpdir, 'bin', 'pip'), 'install', '.[dev]']) |
|
|
|
dev_frozen = check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) |
|
|
|
dev_frozen = set(dev_frozen.decode('utf-8').strip().split('\n')) - frozen |
|
|
|
|
|
|
|
# pip installs the module itself along with deps so we need to get that out of |
|
|
|
# our list by finding the thing that was file installed during dev |
|
|
|
frozen = sorted([p for p in frozen if not p.startswith(our_package_name)]) |
|
|
|
dev_frozen = sorted( |
|
|
|
[p for p in dev_frozen if not p.startswith(our_package_name)] |
|
|
|
) |
|
|
|
|
|
|
|
print_packages(frozen, 'frozen') |
|
|
|
print_packages(dev_frozen, 'dev_frozen') |
|
|
|
|
|
|
|
script = argv[0] |
|
|
|
|
|
|
|
with open('requirements.txt', 'w') as fh: |
|
|
|
fh.write(f'# DO NOT EDIT THIS FILE DIRECTLY - use {script} to update\n') |
|
|
|
fh.write('\n'.join(frozen)) |
|
|
|
fh.write('\n') |
|
|
|
|
|
|
|
with open('requirements-dev.txt', 'w') as fh: |
|
|
|
fh.write(f'# DO NOT EDIT THIS FILE DIRECTLY - use {script} to update\n') |
|
|
|
fh.write('\n'.join(dev_frozen)) |
|
|
|
fh.write('\n') |
|
|
|
for target in TARGETS: |
|
|
|
to_install = f'.[{target}]' if target else '.' |
|
|
|
|
|
|
|
check_call([join(tmpdir, 'bin', 'pip'), 'install', to_install]) |
|
|
|
frozen = check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) |
|
|
|
frozen = set(frozen.decode('utf-8').strip().split('\n')) |
|
|
|
# pip installs the module itself along with deps so we need to get that out of |
|
|
|
# our list by finding the thing that was file installed during dev |
|
|
|
|
|
|
|
frozen = sorted( |
|
|
|
[p for p in frozen if not p.startswith(our_package_name)] |
|
|
|
) |
|
|
|
|
|
|
|
print_packages(frozen, f'{target}-frozen') |
|
|
|
|
|
|
|
script = argv[0] |
|
|
|
|
|
|
|
with open( |
|
|
|
f'requirements{"-" + target if target else ""}.txt', 'w' |
|
|
|
) as fh: |
|
|
|
fh.write( |
|
|
|
f'# DO NOT EDIT THIS FILE DIRECTLY - use {script} to update\n' |
|
|
|
) |
|
|
|
fh.write('\n'.join(frozen)) |
|
|
|
fh.write('\n') |