Socket
Socket
Sign inDemoInstall

zaml

Package Overview
Dependencies
0
Maintainers
1
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    zaml

Fast YAML 1.2 Parser for Python 3.6+


Maintainers
1

Readme

🚀 zaml

Fast YAML 1.2 parsing library for Python 3.6+ 🐍

What's This?

Proof-of-concept for my PyCon DE 2022 talk, video, Speeding Up Python with Zig, not yet recommended for production use!

Library with the following objectives:

  • Written in pure Zig, importing Python.h headers directly, no FFI, ctypes or cffi.
  • Compiled using the Zig toolchain / CLI, no other tool (eg. clang) required.
  • Tested to be compatible with mac OSX, Linux and Windows.
  • Installable via PyPI
  • Should not require Zig toolchain locally in order to install and use.
  • Fastest available YAML 1.2 parser for Python.

Help wanted to achieve the full objectives, PRs welcome.

Installation

pip install zaml

Note: currently source distribution only, ie. sdist - no binary wheels (yet), therefore requires Zig 0.10.0 installed locally. Any other Zig version is untested.

Installing Locally

Some pre-requisites (linting etc.), pyenv also recommended:

pre-commit install
pre-commit run --all-files

The simplest possible extension module is a module with one function, that takes no arguments and returns an integer. This repo demonstrates a pure Zig module that does exactly that:

python -m venv .venv
source .venv/bin/activate
pip install -e .

Tests

Tests that the most basic possible Zig extension can in-fact be installed and returns the expected result:

python test.py

Benchmark

To run a benchmark of the current zaml prototype (also runs in CI and asserts that the YAML structure is correctly parsed):

cd benchmark
python benchmark.py

Results on my 2,3 GHz Quad-Core Intel Core i7 Mac:

Running benchmarks...

Benchmark results:
zaml took 0.89 seconds
PyYAML CSafeLoader took 13.36 seconds
ruamel took 38.86 seconds
PyYAML SafeLoader took 81.78 seconds

Credits

Would not exist without kubkon's, zig-yaml: https://github.com/kubkon/zig-yaml

Cross-platform Local Testing

Linux

To test in Linux, the easiest way is probably to use Docker:

docker run --name zaml -v $PWD:/root/zaml -it fedora

This kicks you into a shell in a running a container with this library mounted in the /root/zaml directory. Changes you make on your host machine will be immediately reflected in the container.

Install Python 3 headers, zig and test the library:

dnf install zig python3-devel
cd /root/zaml
python3 -m venv .venvlinux
source .venvlinux/bin/activate
pip install -e .

To re-attach to the container after exiting:

docker start -ia zaml
Windows

To test in Windows from a Mac, the easiest way I have found is to use Parallels.

MacOSX

I am writing this README on a Mac. Consequently, I have not attempted testing this library in MacOSX from another operating system host. If you manage this, please do add documentation about it here.

Publishing to PyPI

Note: Temporary instructions (until full CI setup).

You may need to upgrade build and twine (with your virtualenv activated):

python -m pip install --upgrade build
python -m pip install --upgrade twine

Then:

rm -rf dist
python3 -m build --sdist
python3 -m twine upload --repository pypi dist/*

FAQs


Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc