【问题标题】:Imitate Visual C++ with MinGW or other C++ compilers (for Python packages based on Visual C++)?用 MinGW 或其他 C++ 编译器模仿 Visual C++(对于基于 Visual C++ 的 Python 包)?
【发布时间】:2020-09-20 18:19:46
【问题描述】:

有没有办法使用 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/#_prerequisites

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

我的问题与Microsoft Visual C++ 14.0 is required (Unable to find 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\

仅安装 MSVC (1.8 GB) 之后 - 仅作为测试,看看这是否已经是我所需要的:

我们看到安装仍然失败,但是错误略有变化,至少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个复选框后,我可以安装包了。

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

【问题讨论】:

  • GCC 和 MSVC 的 C++ ABI(甚至可能是头文件)只是不兼容。使用 Clang 可能会有一些运气,但我不保证任何事情。 /// 如果您担心磁盘空间,您可以尝试安装必需品,然后剥离与 Python 包无关的部分。甚至可能有一种方法可以制作出可移植的 MSVC 工具链,但不要分发它(我相信许可证中不允许这样做)。
  • 我在 Visual Studio Code Survey 上给出了我想要改进的反馈:为 Python 包运行提供轻量级的 Visual C++,或者提供可以使用 Clang、MinGW 或其他编译器而不是其他编译器的设置视觉 C++。不太可能有人会关心它,因为它是 Visual C++ 问题而不是 Visual Studio Code 问题。现在每个人都有足够的磁盘空间。我仍然尝试节省磁盘空间,我主要使用 64GB 的上网本。除了磁盘空间之外,同时安装 MinGW 和 Visual C++ 并不好。至少我现在已经尝试过,反馈很少。
  • 我已在github.com/microsoft/vscode-cpptools/issues/5695 上使用此 SO 问题的副本打开此问题

标签: python-3.x windows visual-c++ visual-studio-code mingw


【解决方案1】:

这个想法没有机会。

  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,我们将 在标准库中弃用它(很快)。所以这个请求在 必须对每个实施构建的项目做出未来 工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2014-11-26
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多