Skip to content
Snippets Groups Projects
Commit 7c6d3541 authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

renamed to snakebuild, this won't patch cython's build anymore

parent dfc578f7
No related branches found
No related tags found
No related merge requests found
cython-multibuild snakehouse
================= ==========
[![Build Status](https://travis-ci.org/smok-serwis/cython-multibuild.svg)](https://travis-ci.org/smok-serwis/cython-multibuild) [![Build Status](https://travis-ci.org/smok-serwis/snakehouse.svg)](https://travis-ci.org/smok-serwis/snakehouse)
[![PyPI](https://img.shields.io/pypi/pyversions/cython-multibuild.svg)](https://pypi.python.org/pypi/cython-multibuild) [![PyPI](https://img.shields.io/pypi/pyversions/snakehouse.svg)](https://pypi.python.org/pypi/snakehouse)
[![PyPI version](https://badge.fury.io/py/cython-multibuild.svg)](https://badge.fury.io/py/cython-multibuild) [![PyPI version](https://badge.fury.io/py/snakehouse.svg)](https://badge.fury.io/py/snakehouse)
[![PyPI](https://img.shields.io/pypi/implementation/cython-multibuild.svg)](https://pypi.python.org/pypi/cython-multibuild) [![PyPI](https://img.shields.io/pypi/implementation/snakehouse.svg)](https://pypi.python.org/pypi/snakehouse)
cython-multibuild is a tool to pack mutiple .pyx files snakehouse is a tool to pack mutiple .pyx files
into a single extension. into a single extension.
Inspired by [https://stackoverflow.com/questions/30157363/collapse-multiple-submodules-to-one-cython-extension](this StackOverflow discussion). 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 Tested and works on Python 3.8 and Python 3.7,
Build instead of Cythonize itself. both Windows and Linux.
Tested and works on Python 3.8 and Python 3.7.
Usage Usage
----- -----
Take a look at [example](example/) on how to multi-build your Cython extensions. Take a look at [example](example/) on how to multi-build your Cython extensions.
Limitations 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.
from Cython import Build
from setuptools import setup, find_packages from setuptools import setup, find_packages
from cython_multibuild import Multibuild from snakehouse import Multibuild, build
cython_multibuilds = [ cython_multibuilds = [
Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx', Multibuild('example_module', ['example_module/test.pyx', 'example_module/test2.pyx',
'example_module/test3/test3.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={ compiler_directives={
'language_level': '3', 'language_level': '3',
}) })
...@@ -18,7 +18,7 @@ setup(name='example_module', ...@@ -18,7 +18,7 @@ setup(name='example_module',
version='0.1', version='0.1',
packages=find_packages(include=['example_module']), packages=find_packages(include=['example_module']),
install_requires=[ install_requires=[
'Cython', 'cython-multibuild' 'Cython', 'snakehouse'
], ],
zip_safe=False, zip_safe=False,
tests_require=[ tests_require=[
......
# coding: utf-8 # coding: utf-8
[metadata] [metadata]
name = cython-multibuild name = snakehouse
long-description = file: README.md long-description = file: README.md
long-description-content-type = text/markdown; charset=UTF-8 long-description-content-type = text/markdown; charset=UTF-8
license_files = LICENSE license_files = LICENSE
author = Piotr Maślanka author = Piotr Maślanka
author_email = piotrm@smok.co author_email = piotrm@smok.co
description = Utilities for packing multiple pyx files into a single Cython extension 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 = project-urls =
Code = https://github.com/smok-serwis/cython-multibuild Code = https://github.com/smok-serwis/snakehouse
Issue tracker = https://github.com/smok-serwis/cython-multibuild/issues Issue tracker = https://github.com/smok-serwis/snakehouse/issues
classifier = classifier =
Programming Language :: Python Programming Language :: Python
Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.7
......
from setuptools import setup, find_packages from setuptools import setup, find_packages
from cython_multibuild import __version__ from snakehouse import __version__
setup(keywords=['cython', 'extension', 'multiple', 'pyx'], setup(keywords=['cython', 'extension', 'multiple', 'pyx'],
packages=find_packages(include=['cython_multibuild']), packages=find_packages(include=['snakehouse']),
version=__version__, version=__version__,
install_requires=[ install_requires=[
'Cython' 'Cython'
......
from .build import build from .build import build
from .multibuild import Multibuild from .multibuild import Multibuild
__version__ = '0.5' __version__ = '1.0'
from Cython import Build from Cython.Build import cythonize
old_cythonize = Build.cythonize
def build(extensions, *args, **kwargs): def build(extensions, *args, **kwargs):
for multibuild in extensions: for multibuild in extensions:
multibuild.generate() multibuild.generate()
return old_cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs) return cythonize([ext.for_cythonize() for ext in extensions], *args, **kwargs)
Build.cythonize = build
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment