Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分发自己的python,跨linux_Python_Linux_Packaging - Fatal编程技术网

分发自己的python,跨linux

分发自己的python,跨linux,python,linux,packaging,Python,Linux,Packaging,我有以下问题。我需要发布我们自己的python版本,其中包含一些魔力。为此,流程如下: 我构建了python解释器(在redhat linux上) 把它安装在某个地方 整件事 制作用户包时,将tar.gz解包到将成为用户包的目录中 tar.gz用户包目录 将tar.gz放到web上 这是我必须使用的方法。好的,坏的?我不知道,作为一名包装工,我几乎没有什么经验,而且无论如何,我不能提出改变。这是他们一贯的做法 事实证明,当用户在suse上解压这个tar.gz,并尝试运行python setupt

我有以下问题。我需要发布我们自己的python版本,其中包含一些魔力。为此,流程如下:

  • 我构建了python解释器(在redhat linux上)
  • 把它安装在某个地方
  • 整件事
  • 制作用户包时,将tar.gz解包到将成为用户包的目录中
  • tar.gz用户包目录
  • 将tar.gz放到web上
  • 这是我必须使用的方法。好的,坏的?我不知道,作为一名包装工,我几乎没有什么经验,而且无论如何,我不能提出改变。这是他们一贯的做法

    事实证明,当用户在suse上解压这个tar.gz,并尝试运行python setuptools(与python一起安装)时,hashlib模块会引发一个异常。我发现在redhat上构建python时,python配置脚本会找到openssl库,这反过来会使它跳过shamodule.c、md5.c等的构建,并编译hashmodule.c以附加到openssl库。显然,suse上的openssl 0.9.7和redhat上的0.9.8在某种程度上是不同的,这意味着,出于某种原因,_hashlib模块在suse上导入时会引发导入错误,导致hashlib尝试导入_md5、_sha、_sha256,而这些都不存在,因为在redhat上没有理由编译它们(因为openssl在那里非常好)

    有人知道如何解决这个问题吗。正如我所说,我作为包装商的经验是最低限度的,所以任何提示和建议都是受欢迎的,我将尽可能多地利用我们的传统

    有人知道如何解决这个问题吗

    你不能,真的。如果问题不是OpenSSL库,那么可能是C库本身,或者其他一些关键组件。您的最佳解决方案是:

    (A) 为您希望支持的每个操作系统构建Python版本,或

    (B) 重新编写代码,以便在每个平台上使用本机系统Python

    您的替代方案是创建一个完全自包含的构建环境,以便在RedHat下构建时,您不使用系统OpenSSL库,而是使用您自己构建的库。这将适用于除C库之外的所有程序,但设置起来可能会很棘手。这样做的目的是最小化包与系统库之间的关系


    如果您只支持RedHat和SUSE,那么您可以通过为每个平台制作适当的规范文件和构建二进制软件包来实现选项(A)。这是一个包装所有东西的好方法。

    < P>你应该考虑发布Python版本的源RPM,而不是二进制TARBARE。您可以使用现有的Python版本,并使用更改补丁对其进行重新打包。在中有关于如何执行此操作的更多详细信息。

    除非静态链接以包含所有依赖项,否则无法使用单个二进制映像支持多个Linux平台。即使这样,您也会在具有较新或较旧内核的平台上遇到问题。