Bad*_*ral 1 c python jython bioinformatics
我想import pygr:
它失败了:
>>> import seqfmt
ImportError: No module named seqfmt
Run Code Online (Sandbox Code Playgroud)
使用它的程序在Python中运行良好.然而,它调用一个名为C的库seqfmt(它有一个C文件和一个PYX文件).这是可能import转移到Jython或者自C上午我运气不好?
.PYX是cython使用的文件扩展名,是一种用python语法编写python的C扩展的工具.Cython创建了一个中间文件(可能是.C你看到的文件,至少它不在git存储库中)并将其编译成python扩展.
Jython还不支持CPython扩展.从它的主页:
有许多不同之处.首先,Jython程序当前不能使用用C编写的CPython扩展模块.这些模块通常具有扩展名为.so,.pyd或.dll的文件.如果你想使用这样的模块,你应该寻找用纯Python或Java编写的等价物.但是,支持此类扩展在技术上是可行的,如IronPython所示.对于Jython的下一个版本,我们计划支持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)
Run Code Online (Sandbox Code Playgroud)
定义外部库调用.你也必须将这个库翻译成Python.
正如关于翻译的旁注:cython不仅可以用于包装C库,还可以简单地加速程序的某些部分.在这些情况下,将它们转换为python模块非常简单.看一下seqfmt.pyx源文件,如果你知道python,那就很明显了.
总而言之,有一个与Jython相关的项目,JyNI,旨在支持Jython的CPython扩展.它正在进行中,所以我无法判断您的库是否受其支持.github存储库中有一些例子,也许你可以让它工作.自述文件声明二进制兼容性,因此在启用JyNI的情况下,您应该能够运行代码而无需重新编译.