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 2.7, 3.4+, and PyPy3.5+.

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, JAVA) 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.2.1

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.

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             rhel-62-64-bit      rhel72-zseries-test ubuntu1604-arm64
debian10            rhel-67-s390x       suse12-64           ubuntu1804-64
debian92            rhel-70-64-bit      suse12-s390x        ubuntu1804-arm64
linux-64-amazon-ami rhel-71-ppc64el     suse15-64           windows-test
macos               rhel-80-64-bit      ubuntu1604

macOS:

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

Windows:

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

Linux:

$ # 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.2.1

Dependencies

PyMongoCrypt supports CPython 2.7, 3.4+, PyPy, and PyPy3.5+.

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.7/site-packages/cffi/api.py", line 146, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/.../lib/python3.7/site-packages/cffi/api.py", line 828, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/.../lib/python3.7/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.2.1

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.5.2.tar.gz (45.2 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.5.2-py2.py3-none-win_amd64.whl (2.7 MB view details)

Uploaded Python 2Python 3Windows x86-64

pymongocrypt-1.5.2-py2.py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (5.0 MB view details)

Uploaded Python 2Python 3manylinux: glibc 2.12+ x86-64

pymongocrypt-1.5.2-py2.py3-none-manylinux2010_x86_64.whl (5.0 MB view details)

Uploaded Python 2Python 3manylinux: glibc 2.12+ x86-64

pymongocrypt-1.5.2-py2.py3-none-macosx_11_0_universal2.whl (6.9 MB view details)

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

pymongocrypt-1.5.2-py2.py3-none-macosx_10_14_intel.whl (3.5 MB view details)

Uploaded Python 2Python 3macOS 10.14+ Intel (x86-64, i386)

File details

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

File metadata

  • Download URL: pymongocrypt-1.5.2.tar.gz
  • Upload date:
  • Size: 45.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for pymongocrypt-1.5.2.tar.gz
Algorithm Hash digest
SHA256 04df581c9ecd42ef529b5c8a598548f5415565b5770d5c6b2db1ea7443265514
MD5 7653c14b008ffe1f1e1515783e7e8063
BLAKE2b-256 d4d844631bceaab3ac9f82b26c55d739a24c26dc90d18c07976ce6870fe26d01

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.5.2-py2.py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.5.2-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 91e73e180602454f0c69504fb448facfec8e894574561f10f39a363e0fa7aca5
MD5 2c3c35673f5ed9aab5eaef48cb58477a
BLAKE2b-256 36c699847244c10b0d63097393e13961c3f5431519f661dd621b6658a3289289

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.5.2-py2.py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.5.2-py2.py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 38fe1a357da368ded6fda6100dbf2a4853b6db778b5ab196c16dded502968cba
MD5 e2c6d8b049dd66a608a728e53e83cca7
BLAKE2b-256 d3e5e3bdcbccb4431fc152d0275a92ed6d02966713bf62cc0e257940d225d8ef

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.5.2-py2.py3-none-manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.5.2-py2.py3-none-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 8406faf8ba4228c9fe7b154b24b0e8dd35c7be36e93e21b555574496df390997
MD5 cf9017466e56b4d38b0aebe2135b3f07
BLAKE2b-256 20fec3f9fcb3861034fc9c51049ed489376b6c6372de3aeee712b217fcd292c7

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.5.2-py2.py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.5.2-py2.py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 1c7813cb9b51c0ed9424a02c9bce1df14789e4976a8f41d79cf9538a614ac914
MD5 4ecfa12519d60a797609a73a264dcd7a
BLAKE2b-256 f2e4758c0ef2b1be64b2f7a2b3ef20a2eddf0379ecfb6d4b7bb7d4058917b1fd

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.5.2-py2.py3-none-macosx_10_14_intel.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.5.2-py2.py3-none-macosx_10_14_intel.whl
Algorithm Hash digest
SHA256 b5d305626c03f85df8106405dfec5d02e0a8c203a63149c710fa7f528e8ce7bf
MD5 0fc276ee1db7b260417535e960e90c82
BLAKE2b-256 d3fc725435a7eb3a196031151000d221af4f42d37c2a32353b8a3f22fc716bd1

See more details on using hashes here.

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