Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Windows SDK生成Python包的批处理脚本_Python_Windows_Build_Winapi - Fatal编程技术网

使用Windows SDK生成Python包的批处理脚本

使用Windows SDK生成Python包的批处理脚本,python,windows,build,winapi,Python,Windows,Build,Winapi,我目前正在按照中的说明在Windows上构建64位扩展 我想编写此脚本,因此我不必每次都打开Windows SDK命令Shell,因此我有一个批处理文件: 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

我目前正在按照中的说明在Windows上构建64位扩展

我想编写此脚本,因此我不必每次都打开Windows SDK命令Shell,因此我有一个批处理文件:

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上构建扩展知之甚少,从这篇文章中可以明显看出这一点,所以如果有更好的方法,请提出建议

EDIT:对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:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\CL.exe
。如果我只是通过快捷方式打开Windows SDK Cmd Shell,然后按照通常的方式从这里安装,就会找到它。

我解决这个问题的方法是使用Python脚本——这比Windows批处理脚本容易得多。您可以使用该模块调用其他程序,它将保持环境变量的完整性,除非您显式更改它们


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

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

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

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

为了子孙后代。这正如预期的那样有效。但是,我的批处理文件中有一个输入错误。如果将第一行替换为

setlocal EnableDelayedExpansion

一切正常。问题是!路径没有在SetEnv.cmd中正确展开。

您最初是如何将其从路径中移除的?我没有将其从路径中移除。它在批处理文件环境中的路径上不可用。我假设它是通过调用SetEnv.cmd实现的。运行Windows SDK命令Shell时,它使用/K选项调用CMD.exe,我怀疑这与此有关。我不知道如何在批处理文件中复制这种行为。克里斯托夫,我编辑了原始帖子,提供了更多信息。啊,好的。嗯,不幸的是,我们有一个检查C编译器的魔法,它没有检测到C编译器以这种方式安装。我必须在distutils.cfg中将compiler=mingw32设置为32位,或者从SDK环境安装。如果我在distutils.cfg中设置compiler=msvc,也许我可以卸载VS并重新安装SDK编译器。我得到
错误:找不到vcvarsall.bat
,我的机器上没有它。查看其他评论线程。我没有vcvarsall.bat。我有
C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat
,但添加对它的调用似乎并没有解决问题。cx\u Freeze不是编译器。它是一个包装机。使用Cython构建的模块运行速度比使用cx\U Freeze打包的模块快10-100倍。