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

Posted

技术标签:

【中文标题】命令“cc”在 OSX High Sierra 上失败,退出状态为 1【英文标题】:command 'cc' failed with exit status 1 on OSX High Sierra 【发布时间】:2018-12-22 21:49:25 【问题描述】:

我正在尝试在 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/

这是蟒蛇

which python
/usr/bin/python

这是我正在使用的点子

which pip
/usr/local/bin/pip

【问题讨论】:

请给我们完整的错误。我们可以从中看出,你的编译器在做某事时以某种方式失败了。 您安装了 Xcode 和命令行工具吗?从 AppStore 安装 Xcode,然后在终端中执行 xcode-select --install 另外,请告诉我们您的设置。您的pip 是为 Apple 预装的 Python 2.7 还是另一个 2.7(如果是,python.org?Anaconda?Homebrew?...?),甚至是非 2.7 版本安装? (你怎么确定的?)你多个 Python 吗?您是否安装了 Xcode、Xcode 命令行工具,或者两者都没有?您是否安装了任何其他编译器(例如,brew install gcc)?你有什么版本的 MySQL,你是如何安装的? @abarnert 我用完整的消息更新了这个问题。我还更新了我正在使用的 python 和 pip。我已经有了 XCode 和 XCode 命令行。我没有安装 gcc。 安装 MySQL 开发文件。 【参考方案1】:

首先,您确定要使用MySQL-python吗?这是一个大部分已死的项目,在过去的五年中一直为遗留支持而半维护,甚至不适用于当前版本的 MySQL。它想要 5.0 或者可能是 5.1;当前版本是 8.0,甚至当前的旧版本是 5.7。


其他选项包括:

mysql-connector,又名 MySQLConnector/Python:这是官方支持的库,来自 MySQL/Oracle。它可能有点慢,这对大多数项目来说并不重要,但有时会。它还有一个不同的 API(尽管如果您坚持使用 DB-API 2 方法,唯一的区别是连接调用;除此之外,它应该只是不同的低级内容)。 mysqlclient:这是 Django 和其他一些框架使用的包。它是MySQL-Python 的更新分支(其中有一些来自其废弃的继任者moist 的东西)。它甚至可以配置为将自身安装为MySQLdb,与MySQL-python 使用的名称相同。 PyMySQL:第三方软件包尽可能与旧的 MySQL-python 兼容,但更简单、更易于维护和安装。 cmysqlPyMySQL 的一个分支,安装起来稍微困难一些,但应该比它快,或者比 mysql-connector 快。

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

其中一些替代方案还需要 MySQL(特别是 MySQLConnector/C、又名 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 故意隐藏操作系统使用的库,以防止人们意外地针对旧版本构建代码而没有获得安全更新。较新的库应该都知道如何处理这个问题,但 MySQL-python 不知道。安装可用 OpenSSL 的最简单方法是再次使用 Homebrew:

brew install openssl

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

【讨论】:

【参考方案2】:

我的问题是我使用的是 MySql 版本 8.0.12。一旦我降级到 MySQL 5.7,它就安装得很好。我使用以下内容删除了版本 8:https://gist.github.com/vitorbritto/0555879fe4414d18569d

上面的要点是:

    使用以下命令检查 MySQL 进程:ps -ax | grep mysql 停止并终止所有 MySQL 进程 brew 删除 mysql 酿造清理 launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist sudo rm /usr/local/mysql sudo rm -rf /usr/local/var/mysql sudo rm -rf /usr/local/mysql* sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* rm -rf ~/Library/PreferencePanes/My* sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm -rf /private/var/db/receipts/mysql 重新启动计算机以确保所有 MySQL 进程都被杀死 使用 brew 安装 mysql:brew install mysql@5.7 最后,pip install mysql-python

【讨论】:

【参考方案3】:

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

brew install mysql-connector-c
brew install mysql
brew link --overwrite mysql
pip install MySQL-python

【讨论】:

以上是关于命令“cc”在 OSX High Sierra 上失败,退出状态为 1的主要内容,如果未能解决你的问题,请参考以下文章

安装国际 PHP 扩展 OSX High Sierra

解决OSX 10.13 High Sierra brew update问题

在 OS X 10.11 El Capitan、macOS 10.12 Sierra、macOS 10.13 High Sierra (< 10.13.3) 上安装 pecl 和 pear

在 macOS High Sierra 上创建 APFS RAM 磁盘

如何在MacOS High Sierra上安装php@7.1的memcached模块?

2011年的macos+high+sierra如何更新系统?