有没有办法使用 MinGW 代替 MS Visual C++?很多 Python 包需要安装 VS C++:4.5 GB 的磁盘空间! MinGW 仅占用 450 MB 并达到编译 C/C++ 的相同目标。
我正在使用 Visual Studio Code,我尽量避免安装 Microsoft Visual C++,这里建议在 3) --> 你也可以只安装 C++ Build Tools:https://code.visualstudio.com/docs/cpp/config-msvc/#_prerequisites
也许只是需要一个技巧来用MinGW模仿MS Visual C++,以便Python包直接找到MinGW编译器,就好像它是MS Visual C++一样?
也许将符号链接(symbolic link)添加到 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 个复选框后,我可以安装该软件包。
也许改变分配的
C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.26.28801\\bin\\HostX86\\x64\\cl.exe
在 python 设置中的某处到 MinGW gcc 编译器 C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\c++.exe
可能已经解决了?
最佳答案
这个想法没有机会。
我已经向他们发送了反馈,但我没有得到任何回复。一位 Python 开发人员保证他们无论如何都知道这个大小问题并且也不喜欢它。唯一的机会是 MSVC 开发人员自己的改变。 MSVC 团队在 future 的版本中不太可能(但并非不可能)减小大小。
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 论坛的引用:
There was a workaround until Python 3.4 which might also be an approach now: Use MinGW compiler till Python 3.4 by adding a “distutils.cfg” to the folder “\Lib\distutils” in Python install directory. It would be nice to have that MinGW “distutils.cfg” workaround for the recent Python versions as well.
现在事实证明 distutils 将不是一个现实的解决方法。
... someone else who might offer to help. But I wouldn’t be too optimistic.
As an aside, now that setuptools has fully taken on distutils, we’ll be deprecating it in the standard library (soon). So this request in future would have to be made to each project implementing a build tool.
关于python-3.x - 用 MinGW 或其他 C++ 编译器模仿 Visual C++(对于基于 Visual C++ 的 Python 包)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149329/