命令'cc'在OSX High Sierra上失败,退出状态为1

时间:2018-07-14 20:57:05

标签: python macos python-2.7 mysql-python

我试图在Mac Os High Sierra上运行

pip install MySQL-python

但是我得到了

error: command 'cc' failed with exit status 1

我已经在this topic上尝试过该解决方案,但是没有用。

这是完整的错误消息

The directory '/Users/filipeferminiano/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/filipeferminiano/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting MySQL-python
  Downloading https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip (108kB)
    100% |████████████████████████████████| 112kB 289kB/s 
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python ... error
    Complete output from command /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-8I1X5u/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-z5HohX/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.13-intel-2.7
    copying _mysql_exceptions.py -> build/lib.macosx-10.13-intel-2.7
    creating build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/__init__.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/converters.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/connections.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/cursors.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/release.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/times.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    creating build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/__init__.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/CR.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/ER.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/FLAG.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/REFRESH.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/CLIENT.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    running build_ext
    building '_mysql' extension
    creating build/temp.macosx-10.13-intel-2.7
    cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -Dversion_info=(1,2,5,'final',1) -D__version__=1.2.5 -I/usr/local/Cellar/mysql/8.0.11/include/mysql -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mysql.c -o build/temp.macosx-10.13-intel-2.7/_mysql.o
    _mysql.c:44:10: fatal error: 'my_config.h' file not found
    #include "my_config.h"
             ^~~~~~~~~~~~~
    1 error generated.
    error: command 'cc' failed with exit status 1

    ----------------------------------------
Command "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-8I1X5u/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-z5HohX/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-install-8I1X5u/MySQL-python/

这是python

which python
/usr/bin/python

这是我正在使用的点子

which pip
/usr/local/bin/pip

3 个答案:

答案 0 :(得分:7)

首先,您确定要使用MySQL-python吗?这是一个几乎是死的项目,在过去的五年中一直为旧版支持进行半维护,甚至无法与当前版本的MySQL一起使用。它需要5.0或​​5.1;当前版本为8.0,甚至当前旧版本为5.7。


其他选项包括:

  • mysql-connector,又名MySQLConnector / Python:这是MySQL / Oracle官方支持的库。这可能会有点慢,这对于大多数项目而言并不重要,但有时可能会如此。它也具有不同的API(尽管如果您坚持使用DB-API 2方法,则唯一的区别是connect调用;除此之外,它应该只是与众不同的低级内容)。
  • mysqlclient:这是Django和其他框架使用的软件包。这是MySQL-Python的更新分支(还有一些废弃的后继产品moist中的内容)。甚至可以将其配置为以MySQLdb的身份安装,MySQL-python使用相同的名称。
  • PyMySQL:一种第三方软件包,旨在与旧的MySQL-python尽可能兼容,但更易于维护和安装。
  • cmysql,这是一个PyMySQL的分支,它的安装难度稍高,但应该比它快或比mysql-connector快。

某些Linux发行版(包括IIRC)和Ubuntu的最新版本提供了名为python-MySQLdb或类似的软件包,实际上不是MySQL-python,而是由mysqlclient用install-as-MySQLdb构建的选项。因此,如果您尝试使用MySQL-python的唯一原因是您在某些Ubuntu机器上使用的是它,则可能是不是,而不是您使用的是想要。

其中一些替代方案也需要MySQL(特别是MySQLConnector/C,aka libmysqlclient及其开发库),有些不需要-但它们都与当前版本兼容。 (尽管在PyMySQL和cmysql的文档中有一些关于8.0加密更改的注释,如果使用8.0则可能需要阅读。)


无论如何,如果您确实想要MySQL-python,那么您将需要以5.x版本安装MySQL。 INSTALL会将您指向MySQL downloads

如果要5.0或​​5.1,则必须在其中一个镜像中浏览Downloads文件夹,以找到源包并按照说明进行构建和安装,因为没有二进制安装程序在当前的Mac上工作。

如果要使用更高版本的5.x版本(记住,MySQL-python不支持该版本,但可能可以使用),Oracle仍会为这些版本提供Mac二进制安装程序。如果在主下载部分找不到它们,则镜像的“下载”文件夹中将包含它们。截至目前,5.6和5.7具有以-macos10.13-x86_64.dmg结尾的二进制安装程序包。

但是,您可能更愿意使用Homebrew安装它。请按照该页面上的说明安装brew,然后将其用于:

brew install mysql@5.5

MySQL-python 也需要OpenSSL库,Apple故意隐藏了OS所使用的库,以防止人们意外地针对旧版本构建代码而未获得安全更新。较新的库都应该知道如何处理,但是MySQL-python却不知道。安装可用的OpenSSL的最简单方法是再次使用Homebrew:

brew install openssl

但是不要只运行该命令并关闭窗口。阅读输出,因为如果要构建MySQL-python,则必须按照它说的做所有的事情。

答案 1 :(得分:0)

abamert的答案对我不起作用。虽然这样做,但您可以尝试跳过第一步,

s_CbFsDeleteFile()

答案 2 :(得分:0)

我的问题是我正在使用MySql版本8.0.12。一旦我降级到MySQL 5.7,它就被完美安装了。我使用以下命令通过以下方式删除了版本8:https://gist.github.com/vitorbritto/0555879fe4414d18569d

以上内容的要旨是:

  1. 使用以下命令检查MySQL进程:ps -ax | grep mysql
  2. 停止并终止任何MySQL进程
  3. brew删除mysql
  4. 啤酒清理
  5. launchctl卸载-w〜/ Library / LaunchAgents / homebrew.mxcl.mysql.plist
  6. sudo rm / usr / local / mysql
  7. sudo rm -rf / usr / local / var / mysql
  8. sudo rm -rf / usr / local / mysql *
  9. sudo rm〜/ Library / LaunchAgents / homebrew.mxcl.mysql.plist
  10. sudo rm -rf / Library / StartupItems / MySQLCOM
  11. sudo rm -rf /库/ PreferencePanes /我的*
  12. rm -rf〜/ Library / PreferencePanes / My *
  13. sudo rm -rf /库/收据/ mysql *
  14. sudo rm -rf /库/收据/ MySQL *
  15. sudo rm -rf / private / var / db / receipts / mysql
  16. 重新启动计算机只是为了确保杀死所有MySQL进程
  17. 使用brew安装mysql:brew install mysql@5.7
  18. 最后,点子安装mysql-python