You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过setup.py用Cython编译Cryptography并打包含依赖的.pyd文件?

实现方案(Windows 10平台)

可以实现将foo.pyx打包为包含cryptography依赖的分发包,让用户无需自行安装cryptography。以下是两种可行的实操方法:


方法一:直接打包依赖文件与.pyd一同分发

这种方式适合直接交付.pyd文件给用户,无需通过pip安装:

  1. 编译自身代码为.pyd
    执行命令编译foo.pyx生成对应的.pyd文件:

    python setup.py build_ext --inplace
    

    编译完成后,你会得到类似foo.cp310-win_amd64.pyd的文件(文件名中的Python版本和架构根据你的环境变化)。

  2. 收集cryptography依赖文件

    • 找到本地Python安装目录下的Lib\site-packages\cryptography文件夹,复制整个目录;
    • 找到Python安装目录下DLLs文件夹中的OpenSSL相关动态库:libcrypto-*.dll和libssl-*.dll(版本号需与你当前使用的cryptography依赖的OpenSSL版本一致)。
  3. 整理分发结构
    将你的.pyd文件、复制的cryptography文件夹、以及两个OpenSSL DLL放在同一目录下。用户使用时,只要该目录在Python的sys.path范围内,就能直接导入你的.pyd并运行,无需额外安装依赖。


方法二:修改setup.py打包成包含依赖的安装包

如果需要通过pip安装的方式分发,可修改setup.py如下(但本质还是会自动安装依赖,适合允许用户通过pip安装但无需手动指定cryptography的场景):

from setuptools import setup
from Cython.Build import cythonize

setup(
    name="foo_package",
    ext_modules=cythonize("foo.pyx"),
    install_requires=[
        "cryptography==x.y.z"  # 替换为你实际使用的cryptography版本号
    ]
)

执行python setup.py bdist_wheel生成wheel包,用户安装该包时会自动拉取并安装指定版本的cryptography。


关键注意事项

  • 必须保证收集的cryptography版本、OpenSSL DLL版本,与你编译.pyd时使用的版本完全一致,否则会出现模块加载错误;
  • .pyd文件与Python版本强绑定,需针对目标用户的Python版本编译对应的文件,避免版本不兼容。

内容的提问来源于stack exchange,提问作者Ojas_Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:35:31