安装mysql-python时无法打开包含文件: 'config-win.h': 没有此文件或目录

76 投票
22 回答
122395 浏览
提问于 2025-04-15 17:26

我正在尝试在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 个回答

25

现在这个被接受的解决方案似乎在新版的mysql-python上不再有效了。安装程序不再提供可以编辑的site.cfg文件。

如果你要安装mysql-python,它会去找这个路径:C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2\include。如果你安装的是64位的MySQL,你可以简单地执行以下步骤:

  1. 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" 这条命令是用来创建一个链接,让它能找到正确的文件夹。
  2. 接着运行 pip install mysql-python 来安装mysql-python。
  3. 最后,删除第一步创建的链接。
94

我只需要去Oracle网站,下载MySQL Connector C 6.0.2(更新的版本不行!),然后按照常规步骤安装就可以了。

https://downloads.mysql.com/archives/c-c/

记得在自定义安装时选择所有可选的附加组件(额外的二进制文件),因为没有这些的话,win64.msi就无法正常工作。

完成这些后,我打开了pycharm,选择安装MySQL-python>=1.2.4这个包,结果一切都很顺利。没有必要更新任何配置或者其他的东西。这是我觉得最简单的操作方式。

18

关于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' ]
...

撰写回答