.pyx文件编译出错

article/2025/9/18 13:13:46

文章目录

  • .pyx文件的编译
  • 导入

参考博客(写的超级好,完美解决了问题)

错误

ImportError: Building module dtw failed: ["distutils.errors.CompileError: command 'D:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\Preview\\\\VC\\\\Tools\\\\MSVC\\\\14.24.28314\\\\bin\\\\HostX86\\\\x64\\\\cl.exe' failed with exit status 2\n"]

天啦噜,这个问题花了半个多小时解决。虽然最后是解决了,但其实也不是很懂里面的原理,幸好网上有相关资料,不然真得花好多时间走更多弯路。

原来,.pyx文件在python语言中属于外部模块,因为是和C语言混合编译的,要成功使用这个模块的代码,在编译整个项目之前,需要首先把.pyx文件编译build通过,生成python代码;然后需要把生成的代码导入到项目中

.pyx文件的编译

我就是一直卡在这一步,我不知道怎么编译.pyx文件。原来,需要专门写一个setup.py模块,专用用于编译这个.pyx文件。

from distutils.core import setup
from Cython.Build import cythonize
import numpy as np
setup(ext_modules=cythonize('D:\\Users\\Administrator\\PycharmProjects\\dataAug\\venv\\Scripts\\src\\aaltd18-master\\distances\\dtw\\dtw.pyx'),include_dirs=[np.get_include()]
)

然后,用setup.py编译。.pyx文件并不是直接执行setup.py就行的,需要使用命令,所以需要在命令行或者anaconda prompt中输入命令。

我之前一直没明白要用命令行,直接在pycharm中执行setup.py,出错

import setup
usage:  [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]or:  --help [cmd1 cmd2 ...]or:  --help-commandsor:  cmd --help
error: no commands supplied

正确方法(使用anaconda prompt):

(base) C:\Users\Administrator>d:(base) D:\>cd D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw(base) D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw>python setup.py build_ext --inplace
running build_ext
building 'dtw.dtw' extension
creating build
creating build\temp.win-amd64-3.7
creating build\temp.win-amd64-3.7\Release
creating build\temp.win-amd64-3.7\Release\Users
creating build\temp.win-amd64-3.7\Release\Users\Administrator
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances
creating build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw
D:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -ID:\ProgramData\Anaconda3\include -ID:\ProgramData\Anaconda3\include "-ID:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\ATLMFC\include" "-ID:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-ID:\Windows Kits\10\include\10.0.18362.0\ucrt" "-ID:\Windows Kits\10\include\10.0.18362.0\shared" "-ID:\Windows Kits\10\include\10.0.18362.0\um" "-ID:\Windows Kits\10\include\10.0.18362.0\winrt" "-ID:\Windows Kits\10\include\10.0.18362.0\cppwinrt" /TcD:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.c /Fobuild\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.obj
dtw.c
D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.c(612): fatal error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file or directory
error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Preview\\VC\\Tools\\MSVC\\14.24.28314\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2

出错是因为setup.py文件写的不对,下面是导致错误的setup.py版本:

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize('D:\\Users\\Administrator\\PycharmProjects\\dataAug\\venv\\Scripts\\src\\aaltd18-master\\distances\\dtw\\dtw.pyx'),include_dirs=[np.get_include()]
)

成功,生成了代码:

(base) D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw>python setup.py build_ext --inplace
running build_ext
building 'dtw.dtw' extension
D:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -ID:\ProgramData\Anaconda3\lib\site-packages\numpy\core\include -ID:\ProgramData\Anaconda3\include -ID:\ProgramData\Anaconda3\include "-ID:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\ATLMFC\include" "-ID:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-ID:\Windows Kits\10\include\10.0.18362.0\ucrt" "-ID:\Windows Kits\10\include\10.0.18362.0\shared" "-ID:\Windows Kits\10\include\10.0.18362.0\um" "-ID:\Windows Kits\10\include\10.0.18362.0\winrt" "-ID:\Windows Kits\10\include\10.0.18362.0\cppwinrt" /TcD:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.c /Fobuild\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.obj
dtw.c
D:\ProgramData\Anaconda3\lib\site-packages\numpy\core\include\numpy\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.c(2288): warning C4244:=: 从“Py_ssize_t”转换到“int”,可能丢失数据
D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.c(2298): warning C4244:=: 从“Py_ssize_t”转换到“int”,可能丢失数据
creating D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw
D:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:D:\ProgramData\Anaconda3\libs /LIBPATH:D:\ProgramData\Anaconda3\PCbuild\amd64 "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\ATLMFC\lib\x64" "/LIBPATH:D:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.18362.0\ucrt\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.18362.0\um\x64" /EXPORT:PyInit_dtw build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.obj /OUT:D:\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw\dtw.cp37-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.cp37-win_amd64.lib正在创建库 build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.cp37-win_amd64.lib 和对象 build\temp.win-amd64-3.7\Release\Users\Administrator\PycharmProjects\dataAug\venv\Scripts\src\aaltd18-master\distances\dtw\dtw.cp37-win_amd64.exp
正在生成代码
已完成代码的生成

生成了.pyd文件,python外部模块
在这里插入图片描述
在这里插入图片描述

导入

这就简单了

直接在主代码main的首部加入

import pyximport
pyximport.install()

http://chatgpt.dhexx.cn/article/EwRwEmBM.shtml

相关文章

python导入pyx文件失败

报错如下: 出现无法导入的情况时,在import之前加上一下两条语句即可解决问题: import pyximport pyximport.install()

pyx 编译成 pyd

1、编写好py文件,然后将后缀改为pyx 2、编写好setup.py文件 3、在setup.py 文件同目录下打开命令行执行: python setup.py build_ext --inplace之后就会生成pyd文件 和C文件 示例: 需要编译成pyd的文件 fast_fib.pyx import functoolsdef …

如何在pycharm上编译使用pyx文件

前言 cython是专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C,然后使用C编译器编译出最终的Python可调用的模块。 本人因在github中找到了一份用cython写的自定义库…

虚拟机的安装与ubuntu的创建,,Ubuntu快捷键

文章目录 vmware安装包与Ubuntu镜像文件:VMware的安装Ubuntu的创建Ubuntu快捷键 在学习与工作中,我们往往可能需要用到windows以外的操作系统,比如Linux系统就适合开发者的使用,往往用到虚拟机,这篇博客来讲讲VMware的…

Ubuntu操作-09 快捷键

文章目录 1 系统快捷键2 终端快捷键3 Gedit编辑器快捷键 Ubuntu快捷键介绍,已在Ubuntu21.10测试 1 系统快捷键 命令说明Ctrl Alt Fn1进入图形化用户登录界面Ctrl Alt Fn2进入当前图形化界面Ctrl Alt Fn3-Fn6进入命令行虚拟终端Ctrl Alt Fn7-Fn12进入另外的…

不可不知的ubuntu系统快捷键

软硬件环境 ubuntu 19.10 64bit Desktop 前言 ubuntu是当前最流行的linux发行版之一,使用ubuntu除了经常使用的Ctrlc (复制) 和Ctrlv (粘帖),其实还有一些不常用但却很有用的快捷键,熟练掌握常用快捷键绝对可以大大提升你的工作学习效率。文中…

ubuntu系统的快捷键,软件等配置

最近要完全使用ubuntu桌面系统了,很多在win 上的快捷键和软件都无法使用了,这里打算总结一下。 文章目录 1 常用快捷键2 常用配置调整左侧状态栏的顺序截图火狐禁止通知键盘快捷键设置DNS修改默认打开程序vs code 终端间距太大 3 常用软件安装meshlabana…

ubuntu的快捷键

1.一起按AltTab,在应用间顺向一览窗口,AltTabShift是逆向预览窗口。先打开终端,后打开文本编辑器,是下面这个样子。 一起按AltTab之后就会变成下面这样子 2.AltF2是打开命令窗口,可输入命令启动应用程序。一起按AltF2之后变成下面这样子,还可…

ubuntu系统快捷键

Ubuntu 16.04常用快捷键(转) 注意:在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键Win Tab 通过启动器切换应用程序Win 1到9 与点击启动器上的图标效果一样Win Shift 1到9 在应用中打开一个新窗口Win T 打…

Ubuntu快捷键、Ubuntu终端常用命令

Ubuntu快捷键、Ubuntu终端常用命令 作为一个window多年忠实粉,后来转去做自动驾驶不得已选用Ubuntu系统,系统需要劳烦同事帮忙装,装好后win10+ubuntu18.04双系统,开机登录ubuntu后一开始真的一脸蒙,啥都不…

14个你必须要知道的ubuntu快捷键

文章目录 1、 Super 键:打开活动搜索界面2、 CtrlAltT:打开 Ubuntu 终端窗口3、 SuperL 或 CtrlAltL:锁屏4、 SuperD or CtrlAltD:显示桌面5、 SuperA:显示应用程序菜单6、 SuperTab 或 AltTab:在运行中的应…

Ubuntu 16.04常用快捷键(转)

注意:在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键Win Tab 通过启动器切换应用程序Win 1到9 与点击启动器上的图标效果一样Win Shift 1到9 在应用中打开一个新窗口Win T 打开垃圾桶 面板 Win(轻触点击) 打开dash主页Win A 打…

Ubuntu常用快捷键

一、 打开Terminal的快捷键是CtrlAltT 二、 中止运行CtrlC 一般最常用的是cd, ls, mkdir, rmdir, cp, rm, mv, clear, pwd, shutdown. 一般使用时只需记住常用命令,不清楚的时候用man查询。如需查看更多命令可以阅读《The Linux Command Line》(《Linux命令行大全…

excel设置行高和列宽

excel设置行高和列宽 1、CtrlA:全选 2、

DataGridView设置行高

DataGridView设置行高 DataGridView绑定数据源后修改行高的方法。 解决方案

Python 技术篇-使用xlwt库操作excel设置行高不生效问题解决方法

默认行高是和文字的高度进行匹配的,即 height_mismatch 的值是 False,这就导致了我们设置行高不会生效,我们要做的就是在设置某一行的高度之前,先把这个属性的值改为 True 就好了。 sheets.row("行索引").height_misma…

excel设置行高等于列宽_如何在Excel中设置行高和列宽

excel设置行高等于列宽 By default, when you create a new workbook in Excel, the row height and column width is always the same for all cells. However, you can easily change the height and width for one or more rows and columns. 默认情况下,当您在Excel中创建…

html怎样设置行高,HTML行高怎么设置

2 回答 2021-01-30 浏览:42 分类:网页设计 回答: 需要准备的材料分别有:电脑、浏览器、html编辑器。 1、首先,打开html编辑器,新建html文件,例如:index.html,编写问题基础代码。 2、在index.html中的标签中,输入样式代码:style="height:100px"。 3、浏览器…

ag-grid 设置行高

ag-gird 表格原生行高实在太宽,现在需要将行高缩小一点.以下将对表格的两种情况进行设置: 1.普通表格数据展示(无分组情况) 效果如图所示: 设置步骤: (1) .rowHeight:设置数据行行高;headerHeight设置表格表头行高, rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表…

Layui 设置行高

layui table设置单行高度以展示图片等 <style>.laytable-cell-1-PICTURE_SETTING_URL { /*PICTURE_SETTING_URL为表格字段的对应field*/height: 100%;max-width: 100%;} </style>