gpt4 book ai didi

python - Centos RPM 与 python 虚拟环境

转载 作者:行者123 更新时间:2023-12-04 19:34:37 30 4
gpt4 key购买 nike

我正在尝试将我的 python virtualenv 部署为 centos rpm。

按照我已采取的步骤。

  • 创建具有所需依赖项的虚拟环境。

  • 要求之一是 pyOpenSSL
  • 内置rpm包。
  • 现在,当安装在新的 centos 实例上时,我收到错误
    '没有名为 OpenSSL 的模块'。

  • pyOpenSSL 模块是否有任何不同的程序,或者我们是否需要在新机器上显式安装 openssl-devel 和 openssl。

    最佳答案

    Is there any different procedure for pyOpenSSL module or do we need to install openssl-devel and openssl explicitely on new machine.



    首先,我很确定 pyOpenSSL只需要 openssl-devel作为构建依赖项,而不是运行时依赖项。因此,只要您分发预构建的副本(无论是通过 tar 压缩可移植 virtualenv、在自定义 repo 中使用 wheel 文件还是其他方式), openssl-devel应该没问题,只有 openssl .

    但是 openssl是个问题。 pyOpenSSL 是一个纯 Python 包装器;它所做的只是 dlopen .so文件并从中调用一堆函数。没有 .so ,它根本不能做任何有用的事情。

    我有点惊讶于任何(非嵌入式)Linux 发行版都没有附带 OpenSSL。如果 CentOS 自带 openssl预安装,那么你已经拥有了所有的依赖项,这里没有什么可做的。

    但是,据我所知,OpenSSL 仍然不是 LSB 的一部分。 ,这至少是一个可以想象的问题,所以让我们处理它。

    作为一个简短的侧边栏:如果您切换到使用 C(或 SWIG 或 SIP)而不是 Python 编写的不同 OpenSSL 包装器(至少有三个主要替代方案),并且直接链接 OpenSSL 而不是通过 cffi ,一切都会简单很多。例如,我相信使用 M2Crypto,您所要做的就是创建一个仅静态的 OpenSSL 构建,然后构建 M2Crypto--openssl=/path/to/static/openssl ,你就完成了。

    但是,如果您设置为 pyOpenSSL , 有没有办法解决?是的,但这并不容易。

    好消息是 pyOpenSSL不是 OpenSSL 本身的包装器,而是较低级别的 cryptography 模块。和 cryptography使用 cffi而不是 ctypes ,这意味着它可以与预构建的帮助模块一起分发,该模块可以静态链接到 OpenSSL。

    不幸的是,虽然 cryptography确实具有在 Windows 上使用静态链接的 OpenSSL 预先构建其助手的内置支持,上次我检查时,它在其他平台上没有这种支持。这意味着您要么需要自己添加支持,要么以某种方式欺骗它。

    如果您对这些东西知之甚少,那么您几乎肯定需要一步一步的帮助。阅读 cffi 上的文档,以及 Building cryptography on Linux文档和捆绑的 INSTALL文件,并确保您了解静态链接和 GNU ld,然后转到 cryptography-dev 邮件列表。或者去 the bug tracker并在 linux 上搜索或创建静态链接 OpenSSL 的问题。

    但是,如果您知道自己在做什么,那么基本的想法是:
  • 要建立静态链接支持,请查看 OpenSSL bindingbinding utilities source 看看它在 Windows 上做了什么并在 Linux 上做同样的事情。
  • 要解决这个问题,您要做的是在本地构建 OpenSSL,将其复制到 cryptography源码树,技巧 cryptography进入链接到libopenssl.so (和 friend )使用相对路径而不是绝对路径,并修改其 setup.py 将 .so 文件复制到包本身中。
  • 如果你想变得非常 hacky,而不是修改 setup.py ,只需在安装后手动将 .so 文件复制到包中即可。 (这显然只有在您使用基于捆绑 virtualenv 的分发机制时才有效,而不是重建它。)


  • 另一种选择是使用可执行打包程序自动将任何相关的非系统库捆绑到可执行文件中。不幸的是,我所知道的唯一一个在 linux 上做这种事情的人是 pyInstaller。 , 和 last I checked它不知道如何处理 cryptography/ pyOpenSSL ,所以你必须再次弄清楚并扩展 pyInstaller你自己。如果你想走这条路,看看那里的其他食谱。另外,我相信 py2app 可以处理 pyOpenSSL ;虽然它是特定于 Mac 的,但看看它的作用可能会帮助您在 linux 上做同样的事情。

    关于python - Centos RPM 与 python 虚拟环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27456658/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com