在 osx 10.8 上安装 mysql-python 时找不到“my_config.h”文件
Posted
技术标签:
【中文标题】在 osx 10.8 上安装 mysql-python 时找不到“my_config.h”文件【英文标题】:"my_config.h" file not found when install mysql-python on osx 10.8 【发布时间】:2012-08-26 10:36:16 【问题描述】:当我想在 osx 10.8 上安装 mysql-python 时遇到这个问题,它显示错误,找不到 'my_config.h' 文件。
下面是我的运行代码:
sudo easy_install mysql-python
Password:
Searching for mysql-python
Reading http://pypi.python.org/simple/mysql-python/
Reading http://sourceforge.net/projects/mysql-python/
Reading http://sourceforge.net/projects/mysql-python
Best match: MySQL-python 1.2.3
Downloading http://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.3.tar.gz#md5=215eddb6d853f6f4be5b4afc4154292f
Processing MySQL-python-1.2.3.tar.gz
Running MySQL-python-1.2.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-UoZlf7/MySQL-python-1.2.3/egg-dist-tmp-phaQqE
warning: no files found matching 'MANIFEST'
warning: no files found matching 'ChangeLog'
warning: no files found matching 'GPL'
clang: warning: argument unused during compilation: '-mno-fused-madd'
_mysql.c:36:10: fatal error: 'my_config.h' file not found
#include "my_config.h"
^
1 error generated.
error: Setup script exited with error: command 'clang' failed with exit status 1
ninjaiimac:MySQL-python-1.2.3 sunninjaisun$
【问题讨论】:
【参考方案1】:brew install mysql
brew unlink mysql
brew install mysql-connector-c
sed -i -e 's/libs="$libs -l "/libs="$libs -lmysqlclient -lssl -lcrypto"/g' /usr/local/bin/mysql_config
pip install MySQL-python
brew unlink mysql-connector-c
brew link --overwrite mysql
【讨论】:
这些步骤对我有用。 macOS 10.13.6。蟒蛇2.7.15。 这对我有用,就像在 macOS Mojave (10.14.1) 和 python 2.7.10 上一样。谢谢!! 此答案的描述应为:“默认的 mysql 包不附带 mysql 头文件,但 mysql-connector-c 包有。问题是,它们覆盖了 mysql 命令,所以我们首先要解开默认包,然后添加mysql-connector-c,然后再重新链接mysql。 我必须将“pip install”命令更改为“LDFLAGS=-L/usr/local/opt/openssl/lib pip install MySQL-python”才能在 Mojave 上为我工作。 根本不起作用。它会在以下位置引发相同的错误:pip install MySQL-python
【参考方案2】:
在 macOS High Sierra 上运行良好:
如果你还没有安装mysql:brew install mysql
brew unlink mysql
brew install mysql-connector-c
brew link --overwrite mysql
pip install MySQL-python
【讨论】:
效果很好。如果您收到@Johnny 的 python egg 错误,请完全执行这些步骤,但从 brew install mysql 开始。您很可能在 OSX 上使用包安装程序安装了 mysql。我认为这样做是像你一样在本地安装 mysql 库,然后 pip 有正确的库来针对 mysql 8 进行编译。谢谢!【参考方案3】:请尝试:
brew install mysql-connector-c
pip install MySQL-python
【讨论】:
对我不起作用,我必须在安装 mysql-connector-c 之前brew unlink mysql
,但随后 pip install MySQL-python
给出“命令“python setup.py egg_info”失败,错误代码为 1 /private/var/folders/sf/gzfw30z10xd6lk3zb7p9q73h0000gn/T/pip-install-VOZP1p/MySQL-python/"
@Jonny 同样的错误,但它与以前的解决方案一起使用:***.com/a/51483898/5004288 我猜是 sed 命令修复它。【参考方案4】:
我使用brew
在 Mac OS 10.14.2 上安装所有内容。
当在 Mojave 上的虚拟环境 (virtualenv
) 中时,其他答案对我不起作用。我按照 Jofsey 的指示进行操作,但出现错误:
# define SIZEOF_LONG 4
^
In file included from _mysql.c:44:
/usr/local/include/my_config.h:179:9: warning: 'SIZEOF_TIME_T' macro redefined [-Wmacro-redefined]
#define SIZEOF_TIME_T 8
^
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/pymacconfig.h:57:17: note: previous definition is here
# define SIZEOF_TIME_T 4
^
2 warnings generated.
_mysql.c:287:14: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
cmd_argc = PySequence_Size(cmd_args);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:317:12: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
groupc = PySequence_Size(groups);
~ ^~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:470:14: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
int j, n2=PySequence_Size(fun);
~~ ^~~~~~~~~~~~~~~~~~~~
_mysql.c:1127:9: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = mysql_real_escape_string(&(self->connection), out, in, size);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:1129:9: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = mysql_escape_string(out, in, size);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:1168:9: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
size = PyString_GET_SIZE(s);
~ ^~~~~~~~~~~~~~~~~~~~
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/stringobject.h:92:32: note: expanded from macro 'PyString_GET_SIZE'
#define PyString_GET_SIZE(op) Py_SIZE(op)
^~~~~~~~~~~
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/object.h:116:56: note: expanded from macro 'Py_SIZE'
#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
_mysql.c:1178:9: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = mysql_real_escape_string(&(self->connection), out+1, in, size);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:1180:9: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = mysql_escape_string(out+1, in, size);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_mysql.c:1274:11: warning: implicit conversion loses integer precision: 'Py_ssize_t' (aka 'long') to 'int' [-Wshorten-64-to-32]
if ((n = PyObject_Length(o)) == -1) goto error;
~ ^~~~~~~~~~~~~~~~~~
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/abstract.h:434:25: note: expanded from macro 'PyObject_Length'
#define PyObject_Length PyObject_Size
^
_mysql.c:1466:10: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = strlen(buf);
~ ^~~~~~~~~~~
_mysql.c:1468:10: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = strlen(buf);
~ ^~~~~~~~~~~
_mysql.c:1504:11: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = strlen(buf);
~ ^~~~~~~~~~~
_mysql.c:1506:11: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
len = strlen(buf);
~ ^~~~~~~~~~~
13 warnings generated.
cc -bundle -undefined dynamic_lookup -Wl,-F. build/temp.macosx-10.14-intel-2.7/_mysql.o -L/usr/local/Cellar/mysql-connector-c/6.1.11/lib -lmysqlclient -lssl -lcrypto -o build/lib.macosx-10.14-intel-2.7/_mysql.so
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'cc' failed with exit status 1
所以,在我运行了这些命令之后,我将其作为最终命令运行,并且成功了:
sudo pip install MySQL-Python --global-option=build_ext --global-option="-I/usr/local/opt/openssl/include" --global-option="-L/usr/local/opt/openssl/lib"
编辑:
我在GitHub 上找到的另一个解决方案,假设您已经运行了brew install openssl
(这避免了对 CLI 参数的需求,并且将防止未来的 SSL 库错误):
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
您可以将上述内容放入您的~/.bash_profile
文件中,然后运行source ~/.bash_profile
,或者如果它是虚拟环境,您可以找到一种方法在虚拟环境shell 中运行导出并在虚拟环境CLI 中检查值与echo $LIBRARY_PATH
。设置 $LIBRARY_PATH
后,您将不会继续看到这些 SSL 库错误。
【讨论】:
我在同一条船上。这是 Mojave 上唯一可行的解决方案 :) 这个解决方案在 python 2.7 和 OSX 10.14 上对我有用。谢谢。【参考方案5】:我的问题是我使用的是 MAMP 的 mysql 版本,它不包含开发标头。我下载了官方版本的 dmg 并立即运行。
【讨论】:
不得不随身携带两个 MySQL 感觉有点……蹩脚。我希望有更好的解决方法 改成postgresql就好了。我很高兴我做到了。 好吧,也许 MAMP 人员可以提供开发标头作为可选下载,以使这样的事情更容易。也许更好的选择是在 MySQL 旁边安装 php 和 Apache,然后卸载 MAMP。但总的来说,我同意:PostgreSQL 很不错。 MAMP 很棒,但它会导致很多问题。我很高兴你遇到了和我一样的问题! :D【参考方案6】:我检查了include
文件夹中由自制软件安装的mysql
和mysql-connector-c
,并惊讶地发现没有名为my_config.h
的文件。因此,我认为现有的高票答案已无法解决问题。
这是我对mysql 8.0.19
的解决方案。我复制了我安装的mysql-connector-c
的include/
文件夹下的mysql.h
文件,并将其另存为my_config.h
在同一文件夹下。然后我按照下面的高票解决方案成功安装了mysql-python 1.2.5
。
brew install mysql
brew unlink mysql
brew install mysql-connector-c # modify the include/ folder after installing the package
sed -i -e 's/libs="$libs -l "/libs="$libs -lmysqlclient -lssl -lcrypto"/g' /usr/local/Cellar/mysql/8.0.19/bin/mysql_config
pip install MySQL-python
brew unlink mysql-connector-c
brew link --overwrite mysql
目前只知道可以成功安装包,但不确定是否是安全的解决方案。
其实mysql-python
是一个比较老的包(最新版本是6年前的),我推荐其他的包在python中与mysql交互(例如mysql-connector-python
)。
【讨论】:
这是 2020 年末的正确答案。不要理会 MySQL-Python。只需使用 mysqlclient 或 mysql-connector-python 代替。事实上,MySQL-Python GitHub 上最热门的固定问题是“这个项目已经死了”:github.com/farcepest/MySQLdb1/issues/151。 这对我在 Catalina 上不起作用。这个答案奏效了,它基本上是安装一个旧的 mysql (5.7):***.com/a/60281682/193210. 对我来说,另一个答案 ***.com/a/60281682/161972 有效 绝对是正确的答案。为我工作,但我必须在运行 pip 之前强制链接 mysql-connector-c: brew link --force mysql-connector-c AFAICTmysql-connector-c
实际上一点用都没有,fwiw。只需ln -s /usr/local/Cellar/mysql/8.0.23_1/include/mysql/mysql.h /usr/local/Cellar/mysql/8.0.23_1/include/mysql/my_config.h
。 Homebrew 对于这种东西真是太垃圾了。【参考方案7】:
在 macos 上,我按照gethue 的安装说明进行操作。然后我从Oracle下载了my_config.h,把文件放到/usr/local/include,安装就可以继续了。但停在一个不相关的丢失文件上。
Oracle 上的链接已针对更新版本的 MySQL 8.0.26 进行了更新。
【讨论】:
将头文件放在/usr/local/include
对我有用
花了几个小时尝试所有不同的解决方案,这个简单的解决方案终于对我有用。 MacOS 11.4、Python 2.7.16、mysql 8.0.25、MySQL-python-1.2.5。
链接现在失效了,感谢上帝,它一直是archived on Wayback Machine
感谢您的提醒。我用ver更新了答案。 8.0.26.【参考方案8】:
这在 macOS Catalina 10.15.7 和 python 2.7 上对我有用
brew install mysql@5.7
brew link --force mysql@5.7
PATH="/usr/local/opt/mysql@5.7/bin:$PATH" LDFLAGS="-L/usr/local/Cellar/mysql@5.7/5.7.29/lib -L/usr/local/Cellar/openssl@1.1/1.1.1d/lib" CPPFLAGS="-I/usr/local/Cellar/mysql@5.7/5.7.29/include -I/usr/local/Cellar/openssl@1.1/1.1.1d/include" pip install mysql-python
【讨论】:
这对我有用。似乎 mysql-python 与 mysql 8 不兼容,或者至少在 python 2.7 上不兼容。【参考方案9】:Catalina 10.15.7 和 Python 2.7.16 在 2020 年 11 月对我有用的是两个答案的组合:
第一步:https://***.com/a/61800247/14686220
但是,我没有简单地将mysql.h
文件复制为my_config.h
在include/
目录中(这可能很危险),而是从official MySQL docs 复制了my_config.h
文件
第二步:https://***.com/a/54079052/14686220
【讨论】:
【参考方案10】:我从答案一路尝试,对我不起作用。
只需从以下位置下载 mysql
https://dev.mysql.com/downloads/mysql/
并安装在您的 Mac 中。 不要使用 brew install mysql
安装 MySQL-python
pip install MySQL-python
每件事都做了
【讨论】:
【参考方案11】:如前所述,您需要 MySQL 的 dev 标头,默认情况下 MAMP 不附带这些标头。 可以将标头添加到 MAMP 版本,而不是使用两个 MySQL 实例。 这里有很好的说明: http://dreamconception.com/tech/how-to-install-mysqldb-mysql-python-on-mamp/
确保不要只是复制粘贴所有命令,它们有点过时,因此您需要更改其中一些命令的版本号。
我使用的是 OS X 10.9 和 python 2.7,一切正常。
【讨论】:
链接已损坏。【参考方案12】:在 macOS 10.15 上,只要您的项目与 PyMySQL 1.3.11 或更高版本兼容,以下似乎可以解决此问题:
brew install mariadb-connector-c
pip install MySQL-python
参考:https://github.com/PyMySQL/mysqlclient-python/blob/master/HISTORY.rst
【讨论】:
【参考方案13】:在 macOS Catalina 10.15.5 上使用 conda
而不是 pip
为我解决了这个问题
conda install mysql-python
【讨论】:
以上是关于在 osx 10.8 上安装 mysql-python 时找不到“my_config.h”文件的主要内容,如果未能解决你的问题,请参考以下文章
将 mac osx 10.8 上的 GDB 从 6.3 更新到 7.*