Commit 584c61ed authored by Roman Yurchak's avatar Roman Yurchak Committed by GitHub

Merge pull request #331 from mdboom/mkpkg

Add a mkpkg tool to make new packages.
parents de7cb8f4 1b867058
......@@ -41,6 +41,13 @@ expect Conda packages to "just work" with Pyodide. (In the longer term, Pyodide
may use conda as its packaging system, and this should hopefully ease that
transition.)
There is a helper tool that will generate a `meta.yaml` for packages on PyPI
that will work for many pure Python packages. This tool will populate the latest
version, download link and sha256 hash by querying PyPI. It doesn't currently
handle package dependencies. To run it, do:
`bin/pyodide mkpkg $PACKAGE_NAME`
The supported keys in the `meta.yaml` file are described below.
### `package`
......
......@@ -5,6 +5,7 @@ from . import buildall
from . import buildpkg
from . import pywasmcross
from . import serve
from . import mkpkg
def main():
......@@ -14,7 +15,8 @@ def main():
for command_name, module in (("buildpkg", buildpkg),
("buildall", buildall),
("pywasmcross", pywasmcross),
("serve", serve)):
("serve", serve),
("mkpkg", mkpkg)):
parser = module.make_parser(subparsers.add_parser(command_name))
parser.set_defaults(func=module.main)
......
#!/usr/bin/env python3
import argparse
import json
import os
from pathlib import Path
import urllib.request
PACKAGES_ROOT = Path(__file__).parent.parent / 'packages'
def make_package(package):
import yaml
url = f'https://pypi.org/pypi/{package}/json'
with urllib.request.urlopen(url) as fd:
json_content = json.load(fd)
entry = json_content['urls'][0]
download_url = entry['url']
sha256 = entry['digests']['sha256']
version = json_content['info']['version']
yaml_content = {
'package': {
'name': package,
'version': version
},
'source': {
'url': download_url,
'sha256': sha256
},
'test': {
'imports': [
package
]
}
}
if not (PACKAGES_ROOT / package).is_dir():
os.makedirs(PACKAGES_ROOT / package)
with open(PACKAGES_ROOT / package / 'meta.yaml', 'w') as fd:
yaml.dump(yaml_content, fd, default_flow_style=False)
def make_parser(parser):
parser.description = '''
Make a new pyodide package. Creates a simple template that will work
for most pure Python packages, but will have to be edited for more wv
complex things.'''.strip()
parser.add_argument(
'package', type=str, nargs=1,
help="The package name on PyPI")
return parser
def main(args):
package = args.package[0]
make_package(package)
if __name__ == '__main__':
parser = make_parser(argparse.ArgumentParser())
args = parser.parse_args()
main(args)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment