Skip to main content

Cython Compilation Made Simple

cycompi is a lightweight Python module designed to simplify the compilation of Cython code by providing a convenient interface. With Cycompi, you can effortlessly compile your Cython modules with minimal setup and enjoy the advantages of improved performance and enhanced functionality.

Tested against Windows / Python 3.11 / Anaconda

pip install cycompi

    Compile Cython code using the provided configuration, options, and command line arguments.
    :param name: name of the module 
    :param configdict: dictionary containing configuration settings (passed to setuptools.Extension)
    :param optionsdict: dictionary containing options settings (passed to Cython.Compiler.Options)
    :param cmd_line_args: command line arguments (passed to setup as compiler_directives)
    :param **kwargs: additional keyword arguments to be passed to subprocess.run

    :return: None

    Example usage:
        from cycompi import compile_cython_code
        import numpy as np
        import os

        numpyincludefolder = np.get_include()
		
		# Explanation: https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html
		# Most of the time, I use this configuration: 
        optionsdict = {
            "Options.docstrings": False,
            "Options.embed_pos_in_docstring": False,
            "Options.generate_cleanup_code": False,
            "Options.clear_to_none": True,
            "Options.annotate": True,
            "Options.fast_fail": False,
            "Options.warning_errors": False,
            "Options.error_on_unknown_names": True,
            "Options.error_on_uninitialized": True,
            "Options.convert_range": True,
            "Options.cache_builtins": True,
            "Options.gcc_branch_hints": True,
            "Options.lookup_module_cpdef": False,
            "Options.embed": False,
            "Options.cimport_from_pyx": False,
            "Options.buffer_max_dims": 8,
            "Options.closure_freelist_size": 8,
        }
        configdict = {
            "py_limited_api": False,
            "name": "cythondict",
            "sources": ["lookdi.pyx"],
            "include_dirs": [numpyincludefolder],
            "define_macros": [
                ("NPY_NO_DEPRECATED_API", 1),
                ("NPY_1_7_API_VERSION", 1),
                ("CYTHON_USE_DICT_VERSIONS", 1),
                ("CYTHON_FAST_GIL", 1),
                ("CYTHON_USE_PYLIST_INTERNALS", 1),
                ("CYTHON_USE_UNICODE_INTERNALS", 1),
                ("CYTHON_ASSUME_SAFE_MACROS", 1),
                ("CYTHON_USE_TYPE_SLOTS", 1),
                ("CYTHON_USE_PYTYPE_LOOKUP", 1),
                ("CYTHON_USE_ASYNC_SLOTS", 1),
                ("CYTHON_USE_PYLONG_INTERNALS", 1),
                ("CYTHON_USE_UNICODE_WRITER", 1),
                ("CYTHON_UNPACK_METHODS", 1),
                ("CYTHON_USE_EXC_INFO_STACK", 1),
                ("CYTHON_ATOMICS", 1),
            ],
            "undef_macros": [],
            "library_dirs": [],
            "libraries": [],
            "runtime_library_dirs": [],
            "extra_objects": [],
            "extra_compile_args": ["/O2", "/Oy"],
            "extra_link_args": [],
            "export_symbols": [],
            "swig_opts": [],
            "depends": [],
            "language": "c",
            "optional": None,
        }
        compiler_directives = {
            "binding": True,
            "boundscheck": False,
            "wraparound": False,
            "initializedcheck": False,
            "nonecheck": False,
            "overflowcheck": False,
            "overflowcheck.fold": True,
            "embedsignature": False,
            "embedsignature.format": "c",  # (c / python / clinic)
            "cdivision": True,
            "cdivision_warnings": False,
            "cpow": True,
            "always_allow_keywords": False,
            "c_api_binop_methods": False,
            "profile": False,
            "linetrace": False,
            "infer_types": True,
            "language_level": 3,  # (2/3/3str)
            "c_string_type": "bytes",  # (bytes / str / unicode)
            "c_string_encoding": "default",  # (ascii, default, utf-8, etc.)
            "type_version_tag": False,
            "unraisable_tracebacks": True,
            "iterable_coroutine": True,
            "annotation_typing": True,
            "emit_code_comments": True,
            "cpp_locals": False,
            "legacy_implicit_noexcept": False,
            "optimize.use_switch": True,
            "optimize.unpack_method_calls": True,
            "warn.undeclared": False,  # (default False)
            "warn.unreachable": True,  # (default True)
            "warn.maybe_uninitialized": False,  # (default False)
            "warn.unused": False,  # (default False)
            "warn.unused_arg": False,  # (default False)
            "warn.unused_result": False,  # (default False)
            "warn.multiple_declarators": True,  # (default True)
            "show_performance_hints": True,  # (default True)
        }

        compile_cython_code(
            name="lookdi",
            configdict=configdict,
            optionsdict=optionsdict,
            cmd_line_args=compiler_directives,
            cwd=os.getcwd(),
            shell=True,
            env=os.environ.copy(),
        )

Metadata

Release files for cycompi 0.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cycompi 0.13
File Size Uploaded Provenance Actions
cycompi-0.13.tar.gz 5.9 kB Without provenance Details for cycompi-0.13.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for cycompi 0.13
File Interpreter ABI Platform Actions
cycompi-0.13-py3-none-any.whl Python 3 none any Details for cycompi-0.13-py3-none-any.whl

Total release size: 14.7 kB

Release files / cycompi-0.13.tar.gz

Download URL cycompi-0.13.tar.gz
Size 5.9 kB
Tags Source
SHA-256 checksum
How to use checksums
280394ea337d54c9f1e40afe4c7e1ee96b61b0d6c8f6026b2f66a24e24c6946b
BLAKE2b-256 checksum
How to use checksums
2ae6c2e3f18ebfa1ce3932df9bc03498aab74e034f657eccb43d14ac4231e6e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Release files / cycompi-0.13-py3-none-any.whl

Download URL cycompi-0.13-py3-none-any.whl
Size 8.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ecd05b3b1710cd6a940cd45b3288e49b2e16684de545df5ca489c4e738533f95
BLAKE2b-256 checksum
How to use checksums
cc03358be56415a6a38f810b21c2178264d4dd833e0d2101cfaf637604fc874d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.7

Security for cycompi 0.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page