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

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

臧俊杰
2023-03-14

有没有办法使用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编译器,就像它是MS Visual C一样?也许在lib目录中添加符号链接并添加一些系统变量路径?

我的问题与微软视觉C密切相关,14.0是必需的(找不到vcvarsall.bat)

当我安装一个需要MS Visual C的软件包作为示例时,我收到的错误,安装pip安装台距:

  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\

我们看到安装仍然失败,但错误略有改变,因为至少错误:为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设置中某处赋值的< code > C:\ \ Program Files(x86)\ \ Microsoft Visual Studio \ \ 2019 \ \ build Tools \ \ VC \ \ Tools \ \ MSVC \ \ 14 . 26 . 28801 \ \ bin \ \ host x86 \ \ x64 \ \ cl . exe 改成MinGW gcc编译器< code > C:\ Program Files(x86)\ mingw-w64 \ i686-8 . 1 . 0-POSIX-dwarf-rt _ V6-rev 0 \ mingw 32 \ bin \ C . exe <

共有1个答案

姚和顺
2023-03-14

这个想法是没有机会的。

  1. 断续器

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

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

Python论坛引述:

在Python 3.4之前有一个解决方法,现在也可能是一种方法:在Pythin 3.4之前使用MinGW编译器,方法是在Pytython安装目录中的文件夹“\Lib\distutils”中添加一个“distutils.cfg”。对于最近的Python版本,最好也有MinGW“distutils.cfg”解决方案。

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

  • 没有人会做这件事。一位之前参与过该项目的Python开发人员:也许有

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

  • 还有一个弃用问题:

顺便说一下,既然setuptools已经完全取代了distutils,我们很快就会在标准库中弃用它。因此,在未来,这个请求将不得不对每个实现构建工具的项目提出。

 类似资料:
  • 有没有办法使用MinGW作为MS Visual C++的替代品?很多Python包都需要VS C++才能安装:4.5GB的磁盘空间!MinGW只需要450 MB,就可以达到编译C/C++的目的。 我使用的是Visual Studio代码,我尽量避免在3)-->中建议的Microsoft Visual C++安装,您也可以只安装C++构建工具:https://Code.visualstudio.co

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

  • 问题内容: 我已经在这里阅读了很多帖子并在网上冲浪,但是也许我没有问正确的问题。我知道在集群可用之前,Redis目前是主/从服务器。但是,我想知道是否有人可以告诉我如何在逻辑上配置Redis以满足我的需要(或者如果它不是正确的工具)。 场景: 我们在美国的两端有2个站点。我们希望客户能够在每个站点上大量书写。然后,我们希望每个客户端也能够在其站点上执行读取。但是,我们希望在小于50ms的时间内从姐

  • 问题内容: 我知道有一个“适用于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。