使用 MinGW 或其他 C++ 编译器模仿 Visual C++(对于基于 Visual C++ 的 Python 包)?

2023-11-30

有没有办法使用 MinGW 来替代 MS Visual C++?很多Python包需要VS C++来安装:4.5 GB磁盘空间! MinGW 仅需要 450 MB 即可达到编译 C/C++ 的相同目标。

我正在使用 Visual Studio Code,并且我尝试避免此处建议的 Microsoft Visual C++ 安装 3) -->您还可以仅安装 C++ 构建工具: https://code.visualstudio.com/docs/cpp/config-msvc/#_preconditions

也许只需要一个技巧来用 MinGW 模仿 MS Visual C++,以便 Python 包可以像 MS Visual C++ 一样直接找到 MinGW 编译器? 也许将符号链接添加到 lib 目录并添加一些系统变量路径?

我的问题与需要 Microsoft Visual C++ 14.0(无法找到 vcvarsall.bat)

当我安装需要 MS Visual C++ 的软件包时出现错误,例如安装pip install dtaidistance:

  creating build\temp.win-amd64-3.7\Release\dtaidistance
  C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\Admin\Anaconda3\lib\site-packages\numpy\core\include -IC:\Users\Admin\Anaconda3\include -IC:\Users\Admin\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include" /Tcdtaidistance/dtw_c.c /Fobuild\temp.win-amd64-3.7\Release\dtaidistance/dtw_c.obj /openmp /Ox /fp:fast /favor:INTEL64 /Og
  cl : Befehlszeile warning D9035 : Die Option "Og" ist veraltet und wird in einer der n„chsten Versionen entfernt.
  dtw_c.c
  C:\Users\Admin\Anaconda3\include\pyconfig.h(59): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "io.h": No such file or directory
  error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.26.28801\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
  ----------------------------------------
  ERROR: Failed building wheel for dtaidistance
  Running setup.py clean for dtaidistance
Failed to build dtaidistance
Installing collected packages: dtaidistance
  Running setup.py install for dtaidistance ... error
    ERROR: Command errored out with exit status 1:
     command: 'C:\Users\Admin\Anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Admin\\AppData\\Local\\Temp\\pip-install-5lb8uekg\\dtaidistance\\setup.py'"'"'; __file__='"'"'C:\\Users\\Admin\\AppData\\Local\\Temp\\pip-install-5lb8uekg\\dtaidistance\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Admin\AppData\Local\Temp\pip-record-dzfe2cwr\install-record.txt' --single-version-externally-managed --compile
         cwd: C:\Users\Admin\AppData\Local\Temp\pip-install-5lb8uekg\dtaidistance\

After installing only MSVC (1.8 GB) - only that, as a test to see if that is already all I need: installation of only MSVC

我们看到安装仍然失败,但是错误略有变化,至少ERROR: Failed building wheel for dtaidistance现在已经消失了,请看下面的截图:

    creating build\temp.win-amd64-3.7\Release\dtaidistance
    C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\Admin\Anaconda3\lib\site-packages\numpy\core\include -IC:\Users\Admin\Anaconda3\include -IC:\Users\Admin\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.26.28801\include" /Tcdtaidistance/dtw_c.c /Fobuild\temp.win-amd64-3.7\Release\dtaidistance/dtw_c.obj /openmp /Ox /fp:fast /favor:INTEL64 /Og
    cl : Befehlszeile warning D9035 : Die Option "Og" ist veraltet und wird in einer der n„chsten Versionen entfernt.
    dtw_c.c
    C:\Users\Admin\Anaconda3\include\pyconfig.h(59): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "io.h": No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.26.28801\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Users\Admin\Anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Admin\\AppData\\Local\\Temp\\pip-install-jr44cxi8\\dtaidistance\\setup.py'"'"'; __file__='"'"'C:\\Users\\Admin\\AppData\\Local\\Temp\\pip-install-jr44cxi8\\dtaidistance\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Admin\AppData\Local\Temp\pip-record-t_8xl3_a\install-record.txt' --single-version-externally-managed --compile Check the logs for full command output.

在上面的 MS Visual++ 屏幕截图中的 MSVC 复选框正下方安装其他 4 个复选框后,我可以安装该软件包。

也许改变分配的C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.26.28801\\bin\\HostX86\\x64\\cl.exe在 MinGW gcc 编译器的 python 设置中的某处C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\c++.exe可能已经解决了?


这个想法没有机会实现。

  1. MSVC

我已经向他们发送了反馈,但没有得到任何回复。一位 Python 开发人员保证,无论如何他们都知道这个大小问题,但也不喜欢它。唯一的机会是 MSVC 开发人员自己做出改变。 MSVC 团队在未来版本中不太可能(但并非不可能)减小大小。

  1. Python distutils 解决方法

Python 社区不会提供 distutils 解决方法,请参阅https://discuss.python.org/t/imitate-visual-c-with-mingw-or-other-c-compilers-for-python-packages-based-on-visual-c/4609/11.

引用自Python论坛:

在 Python 3.4 之前有一个解决方法,这也可能是一个 现在的方法:使用 MinGW 编译器直到 Python 3.4 通过添加 将“distutils.cfg”复制到Python安装中的文件夹“\Lib\distutils” 目录。如果有 MinGW “distutils.cfg” 那就太好了 也适用于最近的 Python 版本。

现在事实证明 distutils 并不是一个现实的解决方法。

  • 没有人愿意为此工作。一位之前参与过该项目的Python开发者:也许有……

...其他可能提供帮助的人。但我不会太乐观。

  • 还有一个弃用问题:

顺便说一句,现在 setuptools 已经完全取代了 distutils,我们将 (很快)将在标准库中弃用它。所以这个请求在 必须为每个实施构建的项目制定未来 工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MinGW 或其他 C++ 编译器模仿 Visual C++(对于基于 Visual C++ 的 Python 包)? 的相关文章

随机推荐