-
Notifications
You must be signed in to change notification settings - Fork 176
/
bundle_installed_package.py
39 lines (34 loc) · 1.39 KB
/
bundle_installed_package.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python3
"""
Bundle into an sdist-like tar.gz an installed python module suitable
for unzipping into a robot's python site-packages directory.
"""
import argparse
import io
import os
import tarfile
import pkg_resources
def build_tar(pkgname: str, outdir: str):
os.makedirs(outdir, exist_ok=True)
pkg = pkg_resources.get_distribution(pkgname)
with tarfile.open(
name=os.path.join(outdir, f'{pkgname}-{pkg.version}.tar.gz'),
mode='w:gz') as tar:
tar.add(os.path.join(pkg.location, pkgname),
os.path.join(
f'{pkgname}-{pkg.version}', pkgname), recursive=True)
tar.add(os.path.join(pkg.location, f'{pkgname}-{pkg.version}.dist-info'),
os.path.join(
f'{pkgname}-{pkg.version}',
f'{pkgname}-{pkg.version}.dist-info'),
recursive=True)
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(metavar='PACKAGE', type=str, dest='package',
help='the python-importable (as opposed to pypi) name of the package to zip')
parser.add_argument(metavar='OUTPUT_DIR', type=str, dest='outdir',
help='directory to emit the tar to, named PACKAGE-version.tar.gz')
args = parser.parse_args()
tar = build_tar(args.package, args.outdir)
if __name__ == '__main__':
main()