安装mysql-python时无法打开包含文件: 'config-win.h': 没有此文件或目录
我正在尝试在Windows上使用pip在虚拟环境中安装mysql-python。一开始,我遇到了和这里提到的相同错误,不过那里的解决办法对我也有效。现在我遇到了以下错误:
_mysql.c(34) : Fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
如果我在Windows 7上创建一个符号链接,指向我常用的(不是虚拟环境中的)Python的site-packages/MySQLdb目录,我会得到
Error loading MySQLdb module: No module named _mysql
我对此感到有些困惑。有没有什么建议?
22 个回答
现在这个被接受的解决方案似乎在新版的mysql-python上不再有效了。安装程序不再提供可以编辑的site.cfg
文件。
如果你要安装mysql-python,它会去找这个路径:C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\include
。如果你安装的是64位的MySQL,你可以简单地执行以下步骤:
mklink /d "C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\include" "C:\Program Files\MySQL\MySQL Connector C 6.0.2\include"
这条命令是用来创建一个链接,让它能找到正确的文件夹。- 接着运行
pip install mysql-python
来安装mysql-python。 - 最后,删除第一步创建的链接。
我只需要去Oracle网站,下载MySQL Connector C 6.0.2(更新的版本不行!),然后按照常规步骤安装就可以了。
https://downloads.mysql.com/archives/c-c/
记得在自定义安装时选择所有可选的附加组件(额外的二进制文件),因为没有这些的话,win64.msi就无法正常工作。
完成这些后,我打开了pycharm,选择安装MySQL-python>=1.2.4这个包,结果一切都很顺利。没有必要更新任何配置或者其他的东西。这是我觉得最简单的操作方式。
关于mysql 5.5和config-win.h不可见问题的更新
在5.5版本中,config-win.h实际上已经移到了Windows的Connector单独文件夹里。也就是说,它的路径大概是这样的:
C:\Program Files\MySQL\Connector C 6.0.2\include
要解决这个问题,不仅需要下载“开发包”(这个包实际上是用来连接connector的),还需要修改mysqldb的安装脚本,以添加这个include文件夹。我做了一个快速的临时解决办法。
site.cfg:
# Windows connector libs for MySQL.
connector = C:\Program Files\MySQL\Connector C 6.0.2
在setup_windows.py中找到这一行
include_dirs = [ os.path.join(mysql_root, r'include') ]:
然后在后面添加:
include_dirs = [ os.path.join(options['connector'], r'include') ]
这样做虽然不太优雅,但在mysqldb的作者改变这个行为之前是可以用的。
差点忘了提到。以同样的方式,还需要为库添加类似的额外条目:
library_dirs = [ os.path.join(options['connector'], r'lib\opt') ]
也就是说,你的setup_windows.py大概看起来像这样:
...
library_dirs = [ os.path.join(mysql_root, r'lib\opt') ]
library_dirs = [ os.path.join(options['connector'], r'lib\opt') ]
libraries = [ 'kernel32', 'advapi32', 'wsock32', client ]
include_dirs = [ os.path.join(mysql_root, r'include') ]
include_dirs = [ os.path.join(options['connector'], r'include') ]
extra_compile_args = [ '/Zl' ]
...