当前位置: 首页 > 知识库问答 >
问题:

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

惠泳
2023-03-14

有没有办法使用MinGW作为MS Visual C++的替代品?很多Python包都需要VS C++才能安装:4.5GB的磁盘空间!MinGW只需要450 MB,就可以达到编译C/C++的目的。

我使用的是Visual Studio代码,我尽量避免在3)-->中建议的Microsoft Visual C++安装,您也可以只安装C++构建工具:https://Code.visualstudio.com/docs/cpp/config-msvc/#_requireisites

也许只是需要一个技巧来用MinGW模仿MS Visual C++,以便Python包直接找到MinGW编译器,就像它是MS Visual C++一样?也许是向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\

我们看到安装仍然失败,但错误略有变化,因为至少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)\\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可能已经解决了这个问题?

共有1个答案

乌璞瑜
2023-03-14

没有答案。

  1. MSVC

我已经向他们反馈了意见,但我没有得到任何回复。一位Python开发人员保证他们知道这个大小问题,而且也不喜欢这个问题。唯一的机会是MSVC开发人员自己的改变。MSVC团队不太可能,但也不是不可能在未来的发行版中减少该大小。

在Python 3.4之前有一种解决方法,现在也可能是一种方法:在Python 3.4之前使用MinGW编译器,方法是在Python安装目录的文件夹“\lib\distutils”中添加一个“distutils.cfg”。如果能为最近的Python版本提供MinGW“distutils.cfg”解决方案就好了。

现在证明distutils将不是一个现实的变通办法。

  • 没有人会在上面工作。一位之前参与过项目的Python开发人员:也许有...

…另一个可能提供帮助的人。但我不会太乐观。

  • 和弃用问题:

顺便说一句,现在setuptools已经完全承担了distutils,我们将在标准库中(很快)不推荐使用它。因此将来必须向每个实现构建工具的项目提出这个请求。

 类似资料:
  • 有没有办法使用MinGW作为MS Visual C的替代品?很多Python包需要安装VS C:4.5 GB的磁盘空间!MinGW只需450 MB,编译C/C的目标相同。 我正在使用Visual Studio Code,我尽量避免在3)下提出的Microsoft Visual C安装- 也许只需要一个技巧来用MinGW模拟MS Visual C,这样Python包就可以直接找到MinGW编译器,就

  • 问题内容: 我知道有一个“适用于Python 2.7的Microsoft Visual C ++编译器”,但是目前或计划中是否存在针对Python 3.4的Microsoft Visual C 编译器或适用于Python 3.x的夏娃Microsoft Visual C 编译器?如果我不必在整个实验室中安装其他版本的Visual Studio,那将是非常有益的。 问题答案: 不幸的是,要能够使用其

  • 问题内容: 在Linux中,尤其是在Debian或Ubuntu上,有预打包的Mingw交叉编译器可以生成Windows EXE。 但是是否有使用Clang而不是GCC的类似交叉编译器?(或有关如何建造这种野兽的说明。) 问题答案: 我编写了一个工具,可以在Linux上使用clang轻松地为Windows进行编译。检出: https //github.com/tpoechtrager/wclang。

  • 我正在尝试在Visual C项目中使用gRPC。 到目前为止,我已经: 1)使用构建:2)将库与Visual Studio集成: 到目前为止,一切顺利-intellisense自动完成命名空间等。 我的客户端文件如下所示: 所有消息 在构建时,Visual Studio生成了大量125个错误,都是我从未接触过的文件。 在中,有 所有其他错误是在grpc的各种头文件中包括,例如在文件中。更多在和中。

  • 我使用以下两个C++编译器: cl.exe:Microsoft(R)C/C++优化编译器版本19.00.24210 for x86 g++:g++(Ubuntu 5.2.1-22Ubuntu2)5.2.1 201 51010 当使用内置正弦函数时,我得到不同的结果。这并不重要,但有时结果对我来说太有意义了。下面是一个具有“硬编码”值的示例: 使用cl.exe生成的结果: G++的结果: 我知道G+