3

我目前正在按照Compiling 64-bit extension modules on Windows中的说明在 Windows 上构建 64 位扩展。

我想编写这个脚本,所以我不必每次都打开 Windows SDK 命令外壳,所以我有一个批处理文件:

setlocal EnabledDelayedExpansion
CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release
set DISTUTILS_USE_SDK=1
\path\to\python.exe \path\to\setup.py bdist --format=msi

但是,我得到了这些错误。我如何cl.exe重回正轨?

Could not locate executable cl.exe
Executable cl.exe does not exist

公平的警告,我对在 Windows 上构建扩展知之甚少,从这篇文章中可以明显看出,所以如果有的话,请提出更好的方法。

编辑:对 SetEnv.cmd 的原始调用确实会引发错误。

The x64 compilers are not currently installed.
Please go to Add/Remove Programs to update your installation.
.
Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0
.
The system cannot find the batch label specified - Set_x64

然后,我根据系统路径使用的各种命令会出现一些错误(例如,对 git 的子进程调用它找不到 git)。

CL.exe 安装在此处C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\cl.exe。如果我只是通过快捷方式打开 Windows SDK Cmd Shell 并从这里按通常的方式安装,就可以找到它。

4

3 回答 3

3

为了子孙后代。这按预期工作。但是,我的批处理文件中有一个错字。如果将第一行替换为

setlocal EnableDelayedExpansion

一切都按预期工作。问题是!PATH!在 SetEnv.cmd 中没有正确展开。

于 2012-04-11T03:35:57.310 回答
0

我对这个问题的解决方案是使用 Python 脚本——这对我来说比 Windows 批处理脚本容易得多。您可以使用subprocess模块来调用其他程序,它将使您的环境变量保持不变,除非您明确更改它们。

顺便说一句,Cython并不是将 Python 编译为 EXE 文件的唯一方法。您也可以使用像cz_freeze这样的工具,如果您不需要 Cython 的其他功能,我认为它会稍微容易一些。

于 2012-04-10T16:32:45.300 回答
0

如果您的系统中安装了 Visual Studio,请在批处理脚本中添加一个步骤以运行vcvarsall.bat. 例如,如果安装了 Visual Studio 2010,则此批处理文件应存在于

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat",

或者您安装了 Visual Studio 的哪个驱动器,前提是您没有覆盖默认安装位置。

于 2012-04-10T16:57:04.820 回答