我有以下问题。我需要在其中分发我们自己的python版本。为此,该过程如下:
这是我必须使用的方法。好坏?我不知道,作为打包者我没什么经验,无论如何我都不能提出改变。这是他们一直以来的方式。
事实证明,当用户在suse上解压缩此tar.gz并尝试运行python setuptools(已与python一起安装)时,hashlib模块会引发异常。我发现在redhat上构建python,python配置脚本找到openssl库,这反过来使它跳过shamodule.c,md5.c等的构建,并编译hashmodule.c以附加到openssl库。显然,suss上的openssl 0.9.7和redhat上的0.9.8在某种程度上是不同的,这意味着,由于某种原因,_hashlib模块在suse上导入时会引发导入错误,导致hashlib尝试导入_md5,_sha, _sha256,不存在,因为在redhat上没有理由编译它们(因为openssl在那里非常好)。
有谁知道如何解决这个问题。正如我所说,我作为打包机的经验是最低限度的,所以任何提示和建议都是受欢迎的,我会尝试按照我们的遗产允许的方式进行部署。
答案 0 :(得分:2)
有谁知道如何解决这个问题。
你不能,真的。如果不是OpenSSL库是一个问题,它可能是C库本身,或其他一些关键组件。您最好的解决方案是:
(A)为您希望支持的每个操作系统构建一个Python版本,或
(B)重新编写代码,在每个平台上使用本机系统Python。
您可以选择创建一个完全独立的构建环境,以便在RedHat下构建时,您不使用系统 OpenSSL库,而是使用自己构建的库。这将适用于除C库以外的所有内容,但设置起来可能很棘手。我们的想法是尽量减少软件包和系统库之间的关系。
如果您只支持RedHat和SUSE,您可以通过制作适当的规范文件并为每个平台构建二进制包来实现选项(A)。这将是打包一切的好方法。
答案 1 :(得分:0)
您应该考虑分发您的Python版本的源RPM,而不是二进制tarball。您可以使用现有的Python版本并使用一组更改重新打包它。有关如何在RPM Book中执行此操作的详细信息。