跳转到主要内容

libmongocrypt的Python绑定

项目描述

信息:

libmongocrypt的Python绑定。有关最新源代码,请参阅GitHub

作者:

Shane Harvey

关于

Python封装库,用于libmongocrypt,支持驱动程序中的客户端加密。PyMongoCrypt使用cfficryptography

PyMongoCrypt支持Python 3.8+和PyPy3.9+。

支持/反馈

有关PyMongoCrypt的问题、疑问或反馈,请查看我们的支持渠道。请勿直接通过电子邮件联系PyMongoCrypt的开发者解决问题或提问 - 您更有可能在Google Groups的mongodb-user列表上得到回答。

错误/功能请求

认为找到了错误?想在PyMongoCrypt中看到新功能?请在我们的问题管理工具JIRA中提交一个案例

JIRA中所有驱动程序项目(例如PYTHON、CSHARP、JAVA)和核心服务器项目(例如SERVER)的错误报告是公开的

如何寻求帮助

在提交问题时,请包含以下所有信息

  • 重现问题的详细步骤,包括完整的跟踪回溯(如果可能)。

  • 使用的确切Python版本,包括修补程序级别

    $ python -c "import sys; print(sys.version)"
  • 使用的PyMongoCrypt的确切版本

    $ python -c "import pymongocrypt; print(pymongocrypt.__version__)"
  • PyMongoCrypt使用的libbmongocrypt的确切版本

    $ python -c "import pymongocrypt; print(pymongocrypt.libmongocrypt_version())"
  • 使用的PyMongo的确切版本(如果适用),包括修补程序级别

    $ python -c "import pymongo; print(pymongo.version); print(pymongo.has_c())"
  • 操作系统和版本(例如Windows 7,OSX 10.8,……)

  • 使用的Web框架或异步网络库,如果有,包括版本(例如Django 1.7,mod_wsgi 4.3.0,gevent 1.0.1,Tornado 4.0.2,……)

安全漏洞

如果您在驱动程序或其他MongoDB项目中识别到安全漏洞,请根据以下说明报告:此处

安装

可以使用pip安装PyMongoCrypt

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

PyMongoCrypt为macOS、Windows和许多Linux版本提供了包含嵌入式libmongocrypt构建的wheels。

在Linux上从wheels安装需要pip 19或更高版本,因为它增加了对manylinux2010 wheels的支持。较旧的pip版本将尝试使用pymongocrypt-X.Y.tar.gz源分布进行安装,这需要按照以下说明下载和安装libmongocrypt。用户可以通过运行以下命令升级到pip 19:

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

从源安装

从源安装(或pymongocrypt-X.Y.tar.gz源分布,或Linux上的pip < 19)需要安装libmongocrypt的额外步骤。首先,从源安装PyMongoCrypt

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

然后,安装libmongocrypt

安装libmongocrypt

libmongocrypt在evergreen上持续构建和发布。包含在所有支持的变体上构建的libmongocrypt的最新tarball在此发布。下载并解压缩libmongocrypt-all.tar.gz,并将PYMONGOCRYPT_LIB设置为操作系统的libmongocrypt.so文件的路径。例如

$ 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:为您的平台设置libmongocrypt构建,例如对于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

注意如果您的Linux平台不可用,通用的RHEL 6.2 x86_64“nocrypto”构建仍然应该是兼容的,但是“nocrypto”构建会导致加密和解密性能降低

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

其他安装方法(brew、rpm、yum、apt-get、deb等)在此处有记录:https://mongodb.ac.cn/docs/manual/core/csfle/reference/libmongocrypt/#linux-installation

依赖关系

PyMongoCrypt支持Python 3.8+和PyPy3.9+。

PyMongoCrypt需要cfficryptography

如果没有使用官方轮子安装,PyMongoCrypt 还需要在您的系统上安装 libmongocrypt。如果没有安装 libmongocrypt,您将看到如下错误

>>> 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'

使用 PYMONGOCRYPT_LIB 环境变量来加载本地安装的 libmongocrypt 构建版本,而不依赖于特定平台的库路径环境变量,如 LD_LIBRARY_PATH。例如

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

测试

运行测试的最简单方法是,在分发根目录中运行 python setup.py test

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

pymongocrypt-1.11.0.tar.gz (61.7 kB 查看哈希值)

上传时间

构建分发

pymongocrypt-1.11.0-py3-none-win_amd64.whl (1.6 MB 查看哈希值)

上传时间 Python 3 Windows x86-64

pymongocrypt-1.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB 查看哈希值)

上传时间 Python 3 manylinux: glibc 2.17+ x86-64

pymongocrypt-1.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (3.7 MB 查看哈希值)

上传于 Python 3 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

pymongocrypt-1.11.0-py3-none-macosx_11_0_universal2.whl (4.7 MB 查看哈希值)

上传于 Python 3 macOS 11.0+ universal2 (ARM64, x86-64)

支持者