diff --git a/README.md b/README.md index fc2b3a6bf1d231d54ed173e8a6b2a3fdaf6b3cc9..798c8c2e2e02bc020a5c1d2f910c4361ac826af9 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,24 @@ -cython-multibuild -================= -[](https://travis-ci.org/smok-serwis/cython-multibuild) -[](https://pypi.python.org/pypi/cython-multibuild) -[](https://badge.fury.io/py/cython-multibuild) -[](https://pypi.python.org/pypi/cython-multibuild) - -cython-multibuild is a tool to pack mutiple .pyx files +snakehouse +========== +[](https://travis-ci.org/smok-serwis/snakehouse) +[](https://pypi.python.org/pypi/snakehouse) +[](https://badge.fury.io/py/snakehouse) +[](https://pypi.python.org/pypi/snakehouse) + +snakehouse is a tool to pack mutiple .pyx files into a single extension. Inspired by [https://stackoverflow.com/questions/30157363/collapse-multiple-submodules-to-one-cython-extension](this StackOverflow discussion). -This will monkey-patch Cython's Build.cythonize, so take care to import -Build instead of Cythonize itself. - -Tested and works on Python 3.8 and Python 3.7. +Tested and works on Python 3.8 and Python 3.7, +both Windows and Linux. Usage ----- Take a look at [example](example/) on how to multi-build your Cython extensions. - Limitations ----------- -* Two modules with the same name cannot be mentioned in a single Multibuild +* Two modules with the same name cannot be mentioned in a single Multibuild. + diff --git a/cython_multibuild/build.py b/cython_multibuild/build.py deleted file mode 100644 index 5ee6e7d2417224d72f6c1b23d51b8efa3bef16ca..0000000000000000000000000000000000000000 --- a/cython_multibuild/build.py +++ /dev/null @@ -1,12 +0,0 @@ -from Cython import Build - -old_cythonize = Build.cythonize - - -def build(extensions, *args, **kwargs): - for multibuild in extensions: - multibuild.generate() - return old_cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs) - - -Build.cythonize = build diff --git a/example/setup.py b/example/setup.py index 6b6131cf151687d46a3e057e5694ce564c83dbcb..b9e88ef445805e70d7b7af5275c166f408f5c2a1 100644 --- a/example/setup.py +++ b/example/setup.py @@ -1,15 +1,15 @@ -from Cython import Build from setuptools import setup, find_packages -from cython_multibuild import Multibuild - +from snakehouse import Multibuild, build cython_multibuilds = [ Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx', 'example_module/test3/test3.pyx']) ] -ext_modules = Build.cythonize(cython_multibuilds, +# first argument is used directly by snakehouse, the rest and **kwargs are passed to +# Cython.Build.cythonize +ext_modules = build(cython_multibuilds, compiler_directives={ 'language_level': '3', }) @@ -18,7 +18,7 @@ setup(name='example_module', version='0.1', packages=find_packages(include=['example_module']), install_requires=[ - 'Cython', 'cython-multibuild' + 'Cython', 'snakehouse' ], zip_safe=False, tests_require=[ diff --git a/setup.cfg b/setup.cfg index 213d2ea076c60d693b35a4244115d434af3e62e5..07d2c715539853c17019f39abfd871f310245a7e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,16 +1,16 @@ # coding: utf-8 [metadata] -name = cython-multibuild +name = snakehouse long-description = file: README.md long-description-content-type = text/markdown; charset=UTF-8 license_files = LICENSE author = Piotr MaĹlanka author_email = piotrm@smok.co description = Utilities for packing multiple pyx files into a single Cython extension -url = https://github.com/smok-serwis/cython-multibuild +url = https://github.com/smok-serwis/snakehouse project-urls = - Code = https://github.com/smok-serwis/cython-multibuild - Issue tracker = https://github.com/smok-serwis/cython-multibuild/issues + Code = https://github.com/smok-serwis/snakehouse + Issue tracker = https://github.com/smok-serwis/snakehouse/issues classifier = Programming Language :: Python Programming Language :: Python :: 3.7 diff --git a/setup.py b/setup.py index 706ee4ee9460123f15ed80f49fdaf2f899da5f27..1037108e1e6e79d497be3eaac53a8e81f8412e29 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,9 @@ from setuptools import setup, find_packages -from cython_multibuild import __version__ +from snakehouse import __version__ setup(keywords=['cython', 'extension', 'multiple', 'pyx'], - packages=find_packages(include=['cython_multibuild']), + packages=find_packages(include=['snakehouse']), version=__version__, install_requires=[ 'Cython' diff --git a/cython_multibuild/__init__.py b/snakehouse/__init__.py similarity index 75% rename from cython_multibuild/__init__.py rename to snakehouse/__init__.py index c36d32075630cb0f3b5fd0a652fa9f235f9d55a4..5f2ca9a9d33799a9ebea01252a2fa77cf0341b00 100644 --- a/cython_multibuild/__init__.py +++ b/snakehouse/__init__.py @@ -1,4 +1,4 @@ from .build import build from .multibuild import Multibuild -__version__ = '0.5' +__version__ = '1.0' diff --git a/snakehouse/build.py b/snakehouse/build.py new file mode 100644 index 0000000000000000000000000000000000000000..2f2900c9f3e9f42d3d528c99f63ff8ed3b9efcf7 --- /dev/null +++ b/snakehouse/build.py @@ -0,0 +1,7 @@ +from Cython.Build import cythonize + + +def build(extensions, *args, **kwargs): + for multibuild in extensions: + multibuild.generate() + return cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs) diff --git a/cython_multibuild/multibuild.py b/snakehouse/multibuild.py similarity index 100% rename from cython_multibuild/multibuild.py rename to snakehouse/multibuild.py