diff --git a/py2app/recipes/__init__.py b/py2app/recipes/__init__.py index 65706f5..36e4df4 100644 --- a/py2app/recipes/__init__.py +++ b/py2app/recipes/__init__.py @@ -1,6 +1,7 @@ from . import PIL # noqa: F401 from . import automissing # noqa: F401 from . import autopackages # noqa: F401 +from . import black # noqa: F401 from . import ctypes # noqa: F401 from . import detect_dunder_file # noqa: F401 from . import ftplib # noqa: F401 diff --git a/py2app/recipes/black.py b/py2app/recipes/black.py new file mode 100644 index 0000000..1fb86df --- /dev/null +++ b/py2app/recipes/black.py @@ -0,0 +1,26 @@ +import os +from pkg_resources import get_distribution + + +def check(cmd, mf): + m = mf.findNode("black") + if m is None or m.filename is None: + return None + + egg = get_distribution('black').egg_info + top = os.path.join(egg, 'top_level.txt') + + # These cannot be in zip + packages = ["black", "blib2to3"] + + # black may include optimized platform specific C extension which has + # unusual name, e.g. 610faff656c4cfcbb4a3__mypyc; best to determine it from + # the egg-info/top_level.txt + with open(top, 'r') as f: + includes = set(f.read().strip().split('\n')) + includes = list(includes.difference(packages)) + + # Missed dependency + includes.append('pathspec') + + return {"includes": includes, "packages": packages}