【问题标题】:Error importing MySQL package for Python为 Python 导入 MySQL 包时出错
【发布时间】:2015-10-14 07:34:58
【问题描述】:

我正在尝试使用 python 导入 MySQL 模块,更具体地说是 Flask,但我收到错误消息。我在我的应用程序中使用虚拟环境。这是错误:

    Traceback (most recent call last):
  File "../myapp/application.py", line 9, in <module>
    from flask.ext.mysql import MySQL
  File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/flask/exthook.py", line 81, in load_module
    reraise(exc_type, exc_value, tb.tb_next)
  File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/flaskext/mysql.py", line 3, in <module>
    import MySQLdb
  File "/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /Library/Python/2.7/site-packages/_mysql.so
  Referenced from: /Users/pavsidhu/Documents/Web-Development/app/env/lib/python2.7/site-packages/_mysql.so
  Reason: image not found

我可以在错误中看到Library not loaded: /Library/Python/2.7/site-packages/_mysql.so。由于我使用的是虚拟环境,因此路径不正确。应该是/lib/python2.7/site-packages/_mysql.so

有没有办法改变这种情况?谢谢。

编辑:

我发现 OSX 上有一个终端命令可以更改库位置:

 sudo install_name_tool -change libmysqlclient.18.dylib /lib/python2.7/site-packages/MySQLdb/

虽然按回车后我得到了这个:

Usage: /Library/Developer/CommandLineTools/usr/bin/install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input

我似乎没有输入错误的命令,这是什么问题?

【问题讨论】:

  • 你是如何创建 virtualenv 的?它是使用系统的site_packages(--system-site-packages在新的virtualenv版本中,在旧版本中默认启用),还是完全隔离?
  • 是的,它与系统完全隔离。
  • 您缺少install_name_tool 命令的最后一个参数。你的命令应该是install_name_tool -change old new input
  • 那么我将如何更改 _mysql.so 的库?指的是?
  • 尝试将 LD_LIBRARY_PATH 设置为包含 /lib/python2.7/site-packages/。这是一种临时的、特定于环境的方式来实现 install_name_tool 的永久效果。在 bash 中:export LD_LIBRARY_PATH=/lib/python2.7/site-packages/:${LD_LIBRARY_PATH}

标签: python macos virtualenv importerror install-name-tool


【解决方案1】:

作为一项规则,尽量避免像瘟疫一样安装系统 python。是的,甚至基于它的 virtualenvs。它经常会产生难以理解的问题。

我建议获取Homebrew,然后为标头安装 python 和 mysql:

brew install python
brew install mysql

然后将你的 virtualenv 基于 brew 的 python:

virtualenv venv --python /usr/local/bin/python

我知道,要跳过一些障碍,但它会让您的开发过程变得容易得多。更不用说brew 本身就是对开发人员的极大帮助。

我刚刚检查了它是否有效,我花了两分钟才得到一个有效的 MySQLdb。

【讨论】:

  • 工作出色并解决了问题,没有任何问题,很好的答案。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 2013-10-21
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2021-01-06
相关资源
最近更新 更多