使用 ms 编译器在 Windows 上构建 python 模块
我正在尝试在 PC\example_nt 下构建 python 源发行版附带的示例,
我将 example.c 和 setup.py 复制到目录 C:\mymod
当我运行 C:\Python27\python.exe setup 时.py install
我收到错误....
error: Unable to find vcvarsall.bat
我在 distutils 中进行了一些挖掘,发现它是在 microsoft Visual Studio 版本 9 之后进行的但我只有版本 8。显然它试图获取版本 9,因为 C:\Python27 下的 python 是用什么编译的。
我修改了 setup.py 并将以下内容放在最顶部。
from distutils import msvc9compiler
msvc9compiler.VERSION = 8.0
完成此操作后,我能够编译并得到以下内容...
C:\mymod>C:\Python27\python.exe setup.py install
running install
running build
running build_ext
building 'example' extension
creating build
creating build\temp.win32-2.7
creating build\temp.win32-2.7\Release
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\cl.exe /c /nologo /Ox /MD /W3
/GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcexample.c /Fobuild\temp.
win32-2.7\Release\example.obj
example.c
creating build\lib.win32-2.7
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.exe /DLL /nologo /INCREME
NTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild /EXPORT:initexamp
le build\temp.win32-2.7\Release\example.obj /OUT:build\lib.win32-2.7\example.pyd
/IMPLIB:build\temp.win32-2.7\Release\example.lib /MANIFESTFILE:build\temp.win32
-2.7\Release\example.pyd.manifest
Creating library build\temp.win32-2.7\Release\example.lib and object build\te
mp.win32-2.7\Release\example.exp
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\mt.exe -nologo -manifest build
\temp.win32-2.7\Release\example.pyd.manifest -outputresource:build\lib.win32-2.7
\example.pyd;2
running install_lib
copying build\lib.win32-2.7\example.pyd -> C:\Python27\Lib\site-packages
running install_egg_info
Removing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info
Writing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info
现在,当我运行 C:\Python27\python.exe 并尝试导入示例
时,我得到以下内容...
ImportError: DLL load failed: The specified module could not be found.
我做了吗有事吗? VS8 不支持创建 Python 2.7 模块吗? 我应该怎么办?
最终我需要为一些 Windows C 库构建绑定,以便我可以使用 Python 来扩展一些专有程序而不是 C。我必须使用 VS8 来创建 C 扩展。那么我该怎么办呢?
请指教。
谢谢, ~埃里克
I am trying to build the example that comes with the source distribution of python under PC\example_nt
I copied example.c and setup.py to a directory C:\mymod
When I run C:\Python27\python.exe setup.py install
I get the error....
error: Unable to find vcvarsall.bat
I did some digging around in distutils and saw that it was going after version 9 of microsoft visual studio but I only have version 8. Apparently it tries to get version 9 because of what the python under C:\Python27 was compiled with.
I modified setup.py and put the following at the very top.
from distutils import msvc9compiler
msvc9compiler.VERSION = 8.0
After doing this I was able to compile and got the following....
C:\mymod>C:\Python27\python.exe setup.py install
running install
running build
running build_ext
building 'example' extension
creating build
creating build\temp.win32-2.7
creating build\temp.win32-2.7\Release
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\cl.exe /c /nologo /Ox /MD /W3
/GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcexample.c /Fobuild\temp.
win32-2.7\Release\example.obj
example.c
creating build\lib.win32-2.7
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.exe /DLL /nologo /INCREME
NTAL:NO /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild /EXPORT:initexamp
le build\temp.win32-2.7\Release\example.obj /OUT:build\lib.win32-2.7\example.pyd
/IMPLIB:build\temp.win32-2.7\Release\example.lib /MANIFESTFILE:build\temp.win32
-2.7\Release\example.pyd.manifest
Creating library build\temp.win32-2.7\Release\example.lib and object build\te
mp.win32-2.7\Release\example.exp
C:\Program Files\Microsoft Visual Studio 8\VC\BIN\mt.exe -nologo -manifest build
\temp.win32-2.7\Release\example.pyd.manifest -outputresource:build\lib.win32-2.7
\example.pyd;2
running install_lib
copying build\lib.win32-2.7\example.pyd -> C:\Python27\Lib\site-packages
running install_egg_info
Removing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info
Writing C:\Python27\Lib\site-packages\example-1.0-py2.7.egg-info
Now when I run C:\Python27\python.exe and try to import example
I get the following...
ImportError: DLL load failed: The specified module could not be found.
Did I do something wrong? Is VS8 unsupported for creating Python 2.7 modules?
What should I do?
Ultimately I need to build bindings for some Windows C library so that I can use Python to extend some proprietary program instead of C. I have to use VS8 for creating the C extension. So where does that leave me.
Advice please.
Thanks,
~Eric
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一般来说,您必须使用与构建 python 相同版本的 VS 来构建 python 模块。您有多种选择:
如果可行的话我会推荐选项 1。
Generally speaking you have to build the python modules using the same version of VS as python was built with. You have several options:
I'd recommend option 1 if it works.