gpt4 book ai didi

python - 将 pygr 导入 jython 在 C 库上失败

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:03 30 4
gpt4 key购买 nike

我正在尝试导入pygr:

它失败了:

>>> import seqfmt
ImportError: No module named seqfmt

使用它的程序在 Python 中运行良好。然而,它调用了一个名为 seqfmt 的 C 库(它有一个 C 文件和一个 PYX 文件)。是否可以将 import 转移到 Jython 或者因为它是 C 我运气不好吗?

最佳答案

.PYX 是 cython 使用的文件扩展名,cython 是一种以类似 python 的语法为 python 编写 C 扩展的工具。 Cython 创建一个中间文件(大概是您看到的 .C 文件,至少它不在 git repository 中)并将其编译成 python 扩展。

Jython 还不支持 CPython 扩展。来自其主页:

There are a number of differences. First, Jython programs cannot currently use CPython extension modules written in C. These modules usually have files with the extension .so, .pyd or .dll. If you want to use such a module, you should look for an equivalent written in pure Python or Java. However, it is technically feasible to support such extensions, as demonstrated by IronPython. For the next release of Jython, we plan to support the C Python Extension API.

一些cython模块可以很容易地翻译成python,seqfmt就是其中之一,但是pygr还有第二个cython模块cnestedlist,它涉及到C调用:线条

cdef extern from "apps/maf2nclist.h":
[..]
int readMAFrecord(IntervalMap im[],int n,SeqIDMap seqidmap[],int nseq,
int lpoStart,int *p_block_len,FILE *ifile,int maxseq,
long long linecode_count[],int *p_has_continuation)

定义一个外部库调用。您还必须将此库翻译成 Python。

正如关于翻译的旁注:cython 不仅可以用来包装 C 库,还可以简单地加速程序的某些部分。在这些情况下,将它们转换为 python 模块非常简单。查看 seqfmt.pyx 源文件,如果您了解 python,它会很容易理解。

综上所述,有一个与 Jython 相关的项目,JyNI ,旨在支持 Jython 的 CPython 扩展。它正在进行中,所以我无法判断它是否支持您的库。 github 存储库中有一些示例,也许您可​​以使用它。自述文件声称二进制兼容性,因此在启用 JyNI 的情况下,您应该能够运行您的代码而无需任何重新编译。

关于python - 将 pygr 导入 jython 在 C 库上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257665/

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