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.7+ and PyPy3.7+.

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 Python 3.7+ and PyPy3.7+.

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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.12+ x86-64

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

Uploaded Python 3manylinux: glibc 2.12+ x86-64

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

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

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

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

File details

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

File metadata

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

File hashes

Hashes for pymongocrypt-1.6.1.tar.gz
Algorithm Hash digest
SHA256 cf9fcaf1e519ae155de0786329ebd729a7e83cb2b6b19fa08d67ec3bff610b93
MD5 00fd57e721f323e6d97ab88ff3466481
BLAKE2b-256 2ab2c57670bc4ad72c4225e010ede732451d7bd4f7d6f7206e42292c22bf54db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymongocrypt-1.6.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.9

File hashes

Hashes for pymongocrypt-1.6.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3f246f2594ead36b5b9c44c30239ab1d8d882e85072f77cb163b948c9f098f5c
MD5 63d059df9fbf9a51c414de1a0d331984
BLAKE2b-256 b6f411afb693fd082e1482558d710228f203a79b79f9a0a4c1c7c85d7b748f40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pymongocrypt-1.6.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 49cb55cee156421e09896c5daafe0c4e63d922c00921935c40382d5cacdf5feb
MD5 70d7538e46a2eca6b77b27e5bedb6f91
BLAKE2b-256 0c42d9c6ab2716db0d1f53cc2bdbcb48d951a8b6839d5e93fac1819ff28f6ad6

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.6.1-py3-none-manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.6.1-py3-none-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4c1aa094aa8d9690fe555c5546a352a5a471c0443b3ccfc83435251e5146927b
MD5 73a24232b5b82f20595f8b4b092847b6
BLAKE2b-256 63020ea7a4aca5e1f520c902acbade31de90ea7e8857faa0401878cfacfda5a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pymongocrypt-1.6.1-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e9e766720913c61a527ba08acc270bf22df15ffc689094c7796986b5a66b2bd2
MD5 6e3b4cdea32678cafd93cbf754b30dc2
BLAKE2b-256 5298db51d3c6ef659ea6d4745ad030054b6b4f65773d470131170efa852c89d7

See more details on using hashes here.

File details

Details for the file pymongocrypt-1.6.1-py3-none-macosx_10_14_intel.whl.

File metadata

File hashes

Hashes for pymongocrypt-1.6.1-py3-none-macosx_10_14_intel.whl
Algorithm Hash digest
SHA256 35f694a47445249671cf8e5915d4b1de1d1c340e8db874ba350214792b5b41cc
MD5 5d2770c23abee66ea7c85de223fdb68d
BLAKE2b-256 4097989172f968724e39f8b59a6b1a4c497b660dbfc13d849f3b4c5430db2f6c

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