gpt4 book ai didi

python - 使用调试 Python 安装在 Windows 上构建 Python-C-Extension

转载 作者:行者123 更新时间:2023-12-04 01:00:02 31 4
gpt4 key购买 nike

如果我在 Windows 上从源代码构建 CPython,当我想 pip 安装包含 C-Extension 的包时会遇到问题。链接库时似乎发生错误。
例如,在安装 cython 时(但在其他 C 扩展包上也会因相同的错误而崩溃):

LINK : fatal error LNK1104: cannot open file 'python38.lib'

error: command 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.23.28105\bin\HostX86\x86\link.exe' failed with exit status 1104


之所以打不开“python38.lib”,是因为 Debug模式下的“.lib”文件叫做“python38_d.lib”。
一个最小的可重现示例是(在命令行上)基于 Quick Reference of the CPython developer guide :
git clone --branch v3.8.0 https://github.com/python/cpython.git
cd cpython
git checkout v3.8.0
.\PCbuild\build.bat -e -d
.\PCbuild\win32\python_d.exe -m ensurepip
.\PCbuild\win32\python_d.exe -m pip install pip --upgrade -vv
.\PCbuild\win32\python_d.exe -m pip install setuptools --upgrade -vv
.\PCbuild\win32\python_d.exe -m pip install cython -vv
由此产生的 distutils.sysconfig.get_config_vars()是:
{'BINDIR': '...\\cpython\\PCbuild\\win32',
'BINLIBDEST': ...\\cpython\\Lib',
'EXE': '.exe',
'EXT_SUFFIX': '_d.cp38-win32.pyd',
'INCLUDEPY': '...\\cpython\\include;...\\cpython\\PC',
'LIBDEST': '...\\cpython\\Lib',
'SO': '_d.cp38-win32.pyd',
'VERSION': '38',
'exec_prefix': '...\\cpython',
'prefix': '...\\cpython',
'srcdir': '...\\cpython'}
有什么我想念的吗?是否根本不支持在 Windows 上的 Python 调试版本上构建 C 扩展?如果支持:我会怎么做?

最佳答案

这段代码有 pip 笨拙,但在 MSVC19 上对我有用,允许在不构建调试 python 库的情况下调试应用程序。

#ifdef _DEBUG
#define _DEBUG_WAS_DEFINED
#undef _DEBUG
#endif

#include "Python.h"

#ifdef _DEBUG_WAS_DEFINED
#define _DEBUG
#undef _DEBUG_WAS_DEFINED
#endif

关于python - 使用调试 Python 安装在 Windows 上构建 Python-C-Extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126760/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com