Skip to content

iplitharas/pycompile

Folders and files

NameName
Last commit message
Last commit date
Oct 28, 2024
Jun 27, 2023
Jun 27, 2023
Nov 22, 2023
Oct 28, 2024
Oct 28, 2024
Jun 24, 2023
Jun 27, 2023
Nov 22, 2023
Nov 22, 2023
Feb 26, 2023
Nov 18, 2023
Nov 2, 2024
Oct 28, 2024
Oct 28, 2024
Jul 9, 2023

Repository files navigation

pycompile

"""                                        _ _
    _ __  _   _  ___ ___  _ __ ___  _ __ (_) | ___
   | '_ \| | | |/ __/ _ \| '_ ` _ \| '_ \| | |/ _ \
   | |_) | |_| | (_| (_) | | | | | | |_) | | |  __/
   | .__/ \__, |\___\___/|_| |_| |_| .__/|_|_|\___|
   |_|    |___/                    |_|
   
"""

A CLI tool for compiling and benchmarking python source code using Cython or Nuitka.

PyPI PyPI - Downloads PyPI - License Tests Code Style PyPI - Implementation

Latest docs πŸ“

here

Table of contents

  1. Installation πŸ”¨
  2. Compile
  3. Benchmark
  4. Dry run
  5. Local-development πŸ’»πŸ­

Installation

pip install pycompile

Compile

Usage: pycompile compile [OPTIONS]

  Compile the python files using `cython` or `nuitka`.

Options:
  -i, --input-path PATH           Specify the file/folder input path, by
                                  default it will exclude any `test` and
                                  `__init__.py` files  [required]
  -ex, --exclude-glob-paths TEXT  glob files patterns of the files to be
                                  excluded, example: **/ignore_this_module.py
  -v, --verbose                   verbose level
  -e, --engine [cython|nuitka]    CompilerWrapper to be used, defaults to:
                                  `cython`
  -cs, --clean-source             Clean source (.py) files
  -kb, --keep-builds              Keep temporary build files
  -ce, --clean-executables        Clean final executables (.so) files
  --help                          Show this message and exit.
pycompile compile -i your_python_files --clean-source --engine nuitka 

cython_compile.gif or

After the compilation the input dir will have the following structure.

examples
    β”œβ”€β”€ fib.py.py                           
    β”œβ”€β”€ fib.cpython-310-darwin.so                      
    β”œβ”€β”€ test_fib.py                   

Benchmark

Usage: pycompile benchmark [OPTIONS]

  Run a memory and cpu benchmark.

Options:
  -i, --input-path PATH           Specify the file/folder input path
                                  [required]
  -e, --engine [cython|nuitka|both|none]
                                  compiler wrapper(s) to be used for the
                                  benchmark, defaults to `both`.
  -t, --type [memory|cpu|both]    type of benchmark to execute, defaults to
                                  `both`.
  -p, --profile_func_pattern TEXT
                                  function name pattern for profiling,
                                  defaults to `benchmark`. All the functions
                                  with a name that matches this pattern will
                                  be decorated with `@profile` from: `memory-
                                  profiler`, in addition their module needs to
                                  follow  the pattern
                                  (`something_prof_func_name.py` to be
                                  excluded from compilation).
  -v, --verbose                   verbose level
  --help                          Show this message and exit.

It starts a memory and a cpu benchmark, starting with

  • python,
  • cython and,
  • nuitka
pycompile benchmark -i src/examples -vvv

benchmark_cython_python.gif

Important

The python package must have a test_module.py because both benchmark types are invoked with pytest runs

The following structure is required for the benchmark subcommand.

 module
    β”œβ”€β”€ sample_funcs.py                        # implementation
    β”œβ”€β”€ main.py                                # entrypoint with a `main` function, during compilation will be excluded
    β”œβ”€β”€ test_sample_funcs.py                   # test cases

Dry run

pycompile dry_run -i ./src

dry_run.gif

Local-development

For local development run the following command

make setup-local-dev

All available make commands

make help