如何在使用Pip安装Python包时使用MinGW的gcc编译器?

71

我配置了MinGW和Distutils,现在可以使用以下命令编译扩展:

setup.py install

将使用MinGW的gcc编译器并安装该软件包。为此,我安装了MinGW,并创建了以下内容的distutils.cfg文件:

[build]
compiler = mingw32

很棒,但现在我想使用pip的所有好处。 有没有办法在pip中使用相同的MinGW的gcc编译器? 这样当我运行以下内容时:

pip install <package name>

pip会使用MinGW的gcc编译器来编译C代码吗?

目前我遇到了这个错误:无法找到vcvarsall.bat。看起来pip不知道我有gcc编译器。我该如何配置pip以使用gcc编译器?


3
另一个提示:确保文件名为“distutils.cfg”,而不是“distutils.cfg.txt”。有时候,当你创建一个新的文本文件时,Windows会添加“.txt”扩展名。 - sffc
2个回答

107
  • 安装带有C++编译器选项的MinGW
  • C:\MinGW\bin添加到您的PATH中
  • PYTHONPATH\Lib\distutils中创建一个名为distutils.cfg的文件,并添加以下行:
[build]
compiler=mingw32

3
distutils.cfg 文件的创建解决了我的问题 - 我试图使用 pip 安装一个包,但遇到了可怕的“无法找到 vcvarsall.bat”错误。谢谢。 - Chad Cooper
13
请记住,如果您使用虚拟环境,应更改其中Python的版本。翻译时保持原意,使语言通俗易懂,不添加额外解释和内容。 - markijbema
7
谢谢。仍然很繁琐。如果Pip有一个“--compiler”选项就好了。请在https://github.com/pypa/pip/issues/18发表意见。 - Colonel Panic
4
注意,如果您正在使用virtualenv,则需要更改单独的distutils.cfg文件——这是我的问题所在! - Yablargo
2
我在一台64位电脑上安装了Windows 8.1。尝试后,我收到了以下错误信息:error: You should not use mingw32 for gcc >= 4.6.0. Use mingw64 instead, e.g.:python setup.py build_ext -c mingw64。我修改了distutils.cfg文件中的[build]条目,将其改为compiler=mingw32,并成功解决了问题。 - OYRM
感谢您宝贵的回答! - Niko Gamulin

23

尽管配置文件可以解决这个问题,但并不总是可行的选择。我在命令行安装过程中遇到了同样的问题,而且我无法在所有机器和Python发行版上更改配置文件。

这是我的解决方案:

对于使用VC++作为默认选项的mingw32和软件包:

pip install --global-option build_ext --global-option --compiler=mingw32 <package_zip>

对于在 WinPython 上使用 mingw32 作为默认编译器的 Visual C++

pip install --global-option build_ext --global-option --compiler=msvc <package_zip>

3
我们可以从哪里获取 <package_zip>?它是whl文件吗? - Kitwradr
1
<package_zip> 是一个压缩的 pip 包,其中包含需要编译的源代码。您可以从 https://pypi.org/ 下载许多这样的包。 - Anton K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接