项目场景:

Faster R-CNN项目,将pyx文件编译成pyd文件(很多坑,请注意)

项目环境

python 3.6 – conda的虚拟环境
TensorFlow 1.15.0
win 10

问题描述

使用网上的教程进行编译
有一个需要被编译的bbox.pyx文件,创建setup.py文件

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize("bbox.pyx"))

在命令行

python setup.py build_ext --inplace

报错及解决

运行上面的命令,可能会有这两个错误

“Unable to find vcvarsall.bat”

网上有说安装Visual Studio然后装Python的,也有说装C++的,总说纷纭。 我都试了,装Python的话基本不行,装C++后又会出现新坑,但这个新坑能被解决…

另一个错: error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/

按照我的方式来的话,先下载C++


下载完后,再运行,又会报以下错误

python setup.py build_ext --inplace

TypeError: ‘>=’ not supported between instances of ‘NoneType’ and ‘str’

在命令后面加上一个参数,因为刚刚装了C++,调他的解释器(我猜是这个原理)

python setup.py build_ext --inplace --compiler=msvc

可是运行完上面一行又会出现一下错误

error: command ‘C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe’ failed with exit status 2

解决方案是改setup.py文件

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# ext_module = cythonize("TestOMP.pyx")
ext_module = Extension("cython_bbox",["bbox.pyx"],    #更改为自己想要转换的.pyx文件extra_compile_args=["/openmp"],extra_link_args=["/openmp"],)setup(cmdclass = {'build_ext': build_ext},ext_modules = [ext_module],#注意这一句一定要有,不然只编译成C代码,无法编译成pyd文件include_dirs=[np.get_include()]
)# python setup.py build_ext --inplace --compiler=msvc

然后再在命令行执行(为了证明这个不是巧合,我特地将生成的pyd删了,又执行了一次,发现是可行的)

python setup.py build_ext --inplace --compiler=msvc

其他注意事项:

一定要进到那个项目的虚拟环境中执行,不然生成的pyd文件就是base环境下的python版本(不要在vscode终端中执行)

一定要进到项目setup.py文件目录下执行,不然不行

要是下载了文档中的C++还是不行,看一下微软官方的说明,下载一个专门用于python的C++工具

我尝试过,好像下载失败,说是找不到下载文件(可能原文件被删了,I don’t know)

pyd的调用

pyd文件的调用与py文件一样,也是import导入即可,只不过看不到里面写的到底是啥…

猜测

有没有一种可能就是,根本就是setup.py文件写错了,导致不能编译成pyd文件,我认为可能性比较小,B站有个教pyd编译的,也是类似于开头setup.py的写法,编译成功; 但我不敢尝试,因为C++已经装了

然后这个倒腾了我一早上,要是能帮到你,点赞支持一下吧

将pyx文件编译成pyd文件(很多坑,已解决)相关推荐

  1. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  2. java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么...

    理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么 最近在看<深入理解Java虚拟机>弄明白了很多java的底层知识,决定分几部分总结下,从.java文件编译,到 ...

  3. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  4. C#.NET如何将cs文件编译成dll文件 exe文件 如何调用dll文件

    比如我要把TestDLL.cs文件编译成dll文件,则在命令提示符下,输入下面的命令,生成的文件为TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安装 ...

  5. aspx文件编译成DLL文件的原理

    前言 Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互, ...

  6. 【转载】把aspx文件编译成DLL文件-.NET教程,Asp.Net开发

    前言 asp.net不是asp的简单升级,而是微软.net计划中的一个重要组成部分,它依托.net的多语言与强大的类库支持,引进了服务端html控件与web控件,自动处理控件的客户端与服务端的 交互, ...

  7. Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑(转载)

    转自:https://www.cnblogs.com/ibingshan/p/10334471.html Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 前言 ...

  8. 把CS文件编译成dll文件

    编译方法如下: 一.打开VS.NET的C命令提示 二.进入目录 三.输入如下命令: csc /t:library /out:F:\MD5.dll  F:\MD5.cs(常用) 如图: 如何做才能够把c ...

  9. 多个.c文件编译成.ko文件

    以两个C文件为例: 将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c.adc_driver.c编译成一个ko文件! 采用方法: 第一步.修改C文件 1 ...

最新文章

  1. dos分区:C语言建立多个PRI DOS分区
  2. C语言类型转换大学霸IT达人
  3. goland 报错 Main file has non-main package or doesn’t contain main function
  4. 最强无监督行人重识别方法 Cluster Contrast ReID
  5. mysql error manager,MYSQL Starting MySQL. ERROR! Manager of pid-file quit without updating file
  6. 人人网的系统架构 网上搜集
  7. ie浏览器网页版进入_IE浏览器打开网页速度很慢的解决办法
  8. 【报告分享】2020年她趋势报告.pdf(附下载链接)
  9. java里有位移吗_Java 中位移运算符 ,,
  10. vue+webapi 实现WebSocket 推送
  11. Emacs快速切换行号开关
  12. 生活随记 - NBA总决赛第6场 球迷有感
  13. Python学习笔记之循环的实战练习
  14. 《网络基础》p84.interface gigabitethernet 0/0/0报错
  15. 3DS Max 2014启动报错的解决方案
  16. 图层样式之:内发光、外发光
  17. 搜集整理的一些博客导航
  18. Makefile详解(自己觉得重新看一次学了好多东西,红色字)
  19. 在计算机技术指标中mips用来描述,mips用来描述计算机的什么
  20. 计算机内功修炼:程序的机器级表示(C与汇编)

热门文章

  1. 022 发现智能仓储物流系统里的“人情味“
  2. WPF解决Popup窗口随动及显隐
  3. 提示信息 POPUP
  4. Windows 7 33in1 V1.2
  5. 《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案四)》
  6. 擎创动态 | 1024 这么过,隔壁公司都馋哭了
  7. 1小时搭建可视化数据分析平台redash
  8. Linux内核源码阅读以及工具详解
  9. core-periphery(中央边缘结构)的探测
  10. (转)农村生活的可行性分析报告!