在linux上正常跑通的算法,搬到windows下使用就报错了
原来是其中涉及到.pyx文件的编译
在linux下.pyx会被编译成.so的文件,但是在windows下是无法使用.so文件的
需要重新编译成windows下的.pyd格式的才可以直接将python模块成功导入到算法中
所以需要解决的问题就是在windows下将.pyx编译成.pyd格式的文件
以下图所示文件夹下的pyx文件为例
test文件夹下包含的文件为
现在需要将dse_helper.pyx文件编译出对应的.pyd文件
第一步
创建PyxConvertPyd.py文件
并将其放在与dsepruning文件夹所在的目录下,如下图
代码如下
import sys
import numpy as np
A=sys.path.insert(0, "..")
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
setup(
ext_modules=cythonize('./dsepruning/dse_helper.pyx'),
# 这句一定要有,不然只编译C代码,无法编译出pyd文件
include_dirs=[np.get_include()]
)
第二步
在命令行中,切换到PyxConvertPyd.py所在的路径,
然后执行编译命令
python PyxConvertPyd.py build_ext --inplace
如果没有安装Visual C++ tools会报如下错误
此时需要安装VisualCppBuildTools 2015
如果从官网下载的话安装会报如下错误
visual studio C++ build tools 提示安装包丢失或损坏
后来找到了另外一个安装包,成功安装
直接双击运行.exe文件即可。
安装包放在了网盘,可通过个人主页左下角找到下载方式
安装成功后,就可以再次执行编译命令了
此时就可以成功编译了
会生成对应的.pyd文件和.c文件,同时还有一个build文件夹
然后就可以愉快地运行算法了!