Lia*_*con 8 python embed cython f2py
我正在尝试cython化一个python项目,该项目位于https://pypi.python.org/packages/source/p/phaseshifts/phaseshifts-0.1.2-dev.zip,其最终目标是为phsh创建一个独立的可执行文件. py模块.我希望嵌入的项目的核心结构具有以下层次结构:
phaseshifts/
__init__.py
atorb.py
conphas.py
elements.py
leed.py
phsh.py
lib/
__init__.py
libphsh.pyd`
Run Code Online (Sandbox Code Playgroud)
注意:libphsh.pyd模块使用编译f2py.
我想我的问题实际上分为多个部分:
1)如何使用cython创建包含多个.py[x]?文件的独立可执行文件?(比如使用--embed单个模块的选项来嵌入python解释器时)
2)如果1)是可能的,那么可以编译.pyd或.so包含文件,如果是,如何?
非常感谢SO退伍军人的任何帮助:-)
到目前为止,粗略的解决方法是编译libphsh.f成dll,gfortran -shared -o libphsh.dll libphsh.f然后编辑相关的源文件以使用ctypes加载库.接下来,我使用cython *.py创建每个Python模块我希望,除了phsh.py,其中I使用的C源文件cython --embed phsh.py.
最后,我使用GCC编译源代码并链接到python库,例如
gcc -o phsh.exe phsh.c __init__.c atorb.c conphas.c elements.c leed.c model.c \
-I"C:\Python27\include" -L"C:\Python27\libs" -lpython27
Run Code Online (Sandbox Code Playgroud)
但是,在运行已编译的可执行文件时,应用程序终止显示消息:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Run Code Online (Sandbox Code Playgroud)
使用g++编译生成的cpp源文件可以避免异常终止:
cython --cplus --embed phsh.py
Run Code Online (Sandbox Code Playgroud)
事实上,第一次编辑中列出的要点都很费力而且不起作用,因为编译的可执行文件仍然尝试导入每个python模块,因此每个模块也可以编译,但最重要的一步是编译libphsh.f:
f2py -m libphsh libphsh.f
Run Code Online (Sandbox Code Playgroud)
下一步是尝试使用设置脚本自动执行此操作...
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |