Skip to main content

Python bindings for libmongocrypt

Project description

Info:

Python bindings for libmongocrypt. See GitHub for the latest source.

Author:

Shane Harvey

About

Python wrapper library for libmongocrypt that supports client side encryption in drivers. PyMongoCrypt uses cffi and cryptography.

PyMongoCrypt supports Python 3.8+ and PyPy3.9+.

Support / Feedback

For issues with, questions about, or feedback for PyMongoCrypt, please look into our support channels. Please do not email any of the PyMongoCrypt developers directly with issues or questions - you’re more likely to get an answer on the mongodb-user list on Google Groups.

Bugs / Feature Requests

Think you’ve found a bug? Want to see a new feature in PyMongoCrypt? Please open a case in our issue management tool, JIRA:

Bug reports in JIRA for all driver projects (i.e. PYTHON, CSHARP) and the Core Server (i.e. SERVER) project are public.

How To Ask For Help

Please include all of the following information when opening an issue:

  • Detailed steps to reproduce the problem, including full traceback, if possible.

  • The exact python version used, with patch level:

    $ python -c "import sys; print(sys.version)"
  • The exact version of PyMongoCrypt used:

    $ python -c "import pymongocrypt; print(pymongocrypt.__version__)"
  • The exact version of libbmongocrypt used by PyMongoCrypt:

    $ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
  • The exact version of PyMongo used (if applicable), with patch level:

    $ python -c "import pymongo; print(pymongo.version); print(pymongo.has_c())"
  • The operating system and version (e.g. Windows 7, OSX 10.8, …)

  • Web framework or asynchronous network library used, if any, with version (e.g. Django 1.7, mod_wsgi 4.3.0, gevent 1.0.1, Tornado 4.0.2, …)

Security Vulnerabilities

If you’ve identified a security vulnerability in a driver or any other MongoDB project, please report it according to the instructions here.

Installation

PyMongoCrypt can be installed with pip:

$ python -m pip install pymongocrypt
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0

PyMongoCrypt ships wheels for macOS, Windows, and manylinux2010 that include an embedded libmongocrypt build.

Installing from wheels on Linux requires pip 19 or later because it adds support for manylinux2010 wheels. Older versions of pip will attempt installation using the pymongocrypt-X.Y.tar.gz source distribution which requires the extra step of downloading and installing libmongocrypt as described below. Users can upgrade to pip 19 by running:

$ python -m pip install --upgrade 'pip>=19'

Installing from source

Installing from source (or the pymongocrypt-X.Y.tar.gz source distribution, or pip < 19 on Linux) requires an extra step of installing libmongocrypt. First, install PyMongoCrypt from source:

$ git clone git@github.com:mongodb/libmongocrypt.git
$ python -m pip install ./libmongocrypt/bindings/python

Next, install libmongocrypt:

Installing libmongocrypt

libmongocrypt is continuously built and published on evergreen. The latest tarball containing libmongocrypt built on all supported variants is published here. Download and extract libmongocrypt-all.tar.gz and set PYMONGOCRYPT_LIB to the path to your operating system’s libmongocrypt.so file. For example:

$ curl -O https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz
$ mkdir libmongocrypt-all && tar xzf libmongocrypt-all.tar.gz -C libmongocrypt-all
$ ls libmongocrypt-all
amazon2             debian92            rhel-80-64-bit      rhel72-zseries-test ubuntu1804-arm64
amazon2-arm64       linux-64-amazon-ami rhel-81-ppc64el     suse12-64           ubuntu2004-64
amazon2023          macos               rhel-82-arm64       suse15-64           ubuntu2004-arm64
amazon2023-arm64    rhel-62-64-bit      rhel-83-zseries     ubuntu1604          ubuntu2204-64
debian10            rhel-70-64-bit      rhel-91-64-bit      ubuntu1604-arm64    ubuntu2204-arm64
debian11            rhel-71-ppc64el     rhel-91-arm64       ubuntu1804-64       windows-test

macOS:

$ # Set PYMONGOCRYPT_LIB for macOS:
$ export PYMONGOCRYPT_LIB=$(pwd)/libmongocrypt-all/macos/lib/libmongocrypt.dylib
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0

Windows:

$ # Set PYMONGOCRYPT_LIB for Windows:
$ chmod +x $(pwd)/libmongocrypt-all/windows-test/bin/mongocrypt.dll
$ export PYMONGOCRYPT_LIB=$(pwd)/libmongocrypt-all/windows-test/bin/mongocrypt.dll
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0

Linux: set the libmongocrypt build for your platform, for example for Ubuntu 22.04 x86_64:

$ # Set PYMONGOCRYPT_LIB for Ubuntu 22.04 x86_64:
$ export PYMONGOCRYPT_LIB=$(pwd)/libmongocrypt-all/ubuntu2204-64/lib/libmongocrypt.so
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0
$ # Check that native crypto is enabled for better performance:
$ python -c 'from pymongocrypt.binding import lib;print(lib.mongocrypt_is_crypto_available())'
True

Note if your Linux platform is not available, the generic RHEL 6.2 x86_64 “nocrypto” build should still be compatible however the “nocrypto” build will result in lower performance for encryption and decryption:

$ # Set PYMONGOCRYPT_LIB for RHEL 6.2 x86_64:
$ export PYMONGOCRYPT_LIB=$(pwd)/libmongocrypt-all/rhel-62-64-bit/nocrypto/lib64/libmongocrypt.so
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0
$ python -c 'from pymongocrypt.binding import lib;print(lib.mongocrypt_is_crypto_available())'
False

Other methods of installation (brew, rpm, yum, apt-get, deb, etc…) are documented here: https://www.mongodb.com/docs/manual/core/csfle/reference/libmongocrypt/#linux-installation

Dependencies

PyMongoCrypt supports Python 3.8+ and PyPy3.9+.

PyMongoCrypt requires cffi and cryptography.

If not installed using one of the official wheels, PyMongoCrypt also requires libmongocrypt to be installed on your system. If libmongocrypt is not installed you will see an error like this:

>>> import pymongocrypt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pymongocrypt/__init__.py", line 15, in <module>
    from pymongocrypt.binding import libmongocrypt_version, lib
  File "pymongocrypt/binding.py", line 803, in <module>
    lib = ffi.dlopen(os.environ.get('PYMONGOCRYPT_LIB', 'mongocrypt'))
  File "/.../lib/python3.8/site-packages/cffi/api.py", line 146, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/.../lib/python3.8/site-packages/cffi/api.py", line 828, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/.../lib/python3.8/site-packages/cffi/api.py", line 823, in _load_backend_lib
    raise OSError(msg)
OSError: ctypes.util.find_library() did not manage to locate a library called 'mongocrypt'

Use the PYMONGOCRYPT_LIB environment variable to load a locally installed libmongocrypt build without relying on platform specific library path environment variables, like LD_LIBRARY_PATH. For example:

$ export PYMONGOCRYPT_LIB='/path/to/libmongocrypt.so'
$ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
1.9.0

Testing

The easiest way to run the tests is to run python setup.py test in the root of the distribution.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymongocrypt-1.15.1.tar.gz (64.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pymongocrypt-1.15.1-py3-none-win_amd64.whl (1.6 MB view details)

Uploaded Python 3Windows x86-64

pymongocrypt-1.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

pymongocrypt-1.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (4.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pymongocrypt-1.15.1-py3-none-macosx_11_0_universal2.whl (4.7 MB view details)

Uploaded Python 3macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file pymongocrypt-1.15.1.tar.gz.

File metadata

  • Download URL: pymongocrypt-1.15.1.tar.gz
  • Upload date:
  • Size: 64.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pymongocrypt-1.15.1.tar.gz
Algorithm Hash digest
SHA256 b91563a2e111a40283222b4eb8f314e4c7b5a2799ac7c68c947de1ad5b6ae3c9
MD5 314f9efa9325a117bb3a8ec6ad1f7108
BLAKE2b-256 e8e05e02f07f24ec27d0e6d0e6d7a9c63fa2f84a22a4e2d5049eff58dc176361

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymongocrypt-1.15.1.tar.gz:

Publisher: release-python.yml on mongodb/libmongocrypt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymongocrypt-1.15.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.15.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4b63df87ab283be3bdcc3c2231e7d12560d1d0d75c2b7d76c941f489d22e0a46
MD5 ae51ac5a61ff5d70d40b41f5a5001588
BLAKE2b-256 7da80cb93fcaa430d39dfe362053b9291cfab73a832d6785b6ffefd6b8ad66a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymongocrypt-1.15.1-py3-none-win_amd64.whl:

Publisher: release-python.yml on mongodb/libmongocrypt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymongocrypt-1.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 788d56ca36e1970d860004e67ad1ce4c68f29b9f4449a375981416cf75c9449a
MD5 2e9c21adc841df80a14f45670d24728c
BLAKE2b-256 1c659495f105ef08f8f2cb25d4e0bd643dc99d95c11c93dbb036da114b42df59

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymongocrypt-1.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-python.yml on mongodb/libmongocrypt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymongocrypt-1.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c0ad6a20a406a14950e85f5331750ed8347a504cca95dbcb049d90cba0cb8d3d
MD5 f9996117726e128926dbe02a84829d43
BLAKE2b-256 2164cba1a5f85dadbfc46ce4212955b8630c1d6a506e512218644f6341b77239

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymongocrypt-1.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release-python.yml on mongodb/libmongocrypt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymongocrypt-1.15.1-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.15.1-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8517c5d1cd94db86831732da32c5cd444dad60e930e53603551d27f968a747ec
MD5 a83f3ed40e5fc2038577bc142e022d47
BLAKE2b-256 5a60ff826386c21ade3e9c13dda1dcfd1e1e572000e398ec3955095b56ba5d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymongocrypt-1.15.1-py3-none-macosx_11_0_universal2.whl:

Publisher: release-python.yml on mongodb/libmongocrypt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page