【问题标题】:Django - MySQLdb: Symbol not found: _mysql_affected_rowsDjango - MySQLdb:找不到符号:_mysql_affected_rows
【发布时间】:2010-11-20 21:42:54
【问题描述】:

一位同事在尝试从 Django 使用 MySQLdb 时收到此错误消息:

[...]
ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: 
Error loading MySQLdb module: dlopen(/Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so, 2): 
Symbol not found: _mysql_affected_rows 
Referenced from: /Users/roy/.python-eggs/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg-tmp/_mysql.so Expected in: dynamic lookup

他正在使用 OS X 10.5、Python 2.5(随 OS X 提供)、MySQL 5.1 和 MySQLdb 1.2.3c1。

知道如何攻击这个吗?

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    如果您从头开始安装 mysql 和它的 Python 绑定可能是最好的,每当我在 OS X 10.4 或 10.5 上需要 MySQLdb 时,我都会使用以下步骤:

    1. 为您的系统安装MySQL,dmg 安装程序应该足够了

    2. MySQL 的默认位置大约在:/usr/local/mysql-5.0.45-osx10.4-i686。来自/usr/local/mysql/lib,创建软链接:

      ln -s ../../mysql-5.0.45-osx10.4-i686/lib mysql

    3. 下载MySQLdb source并解压

    4. 编辑解压后的 MySQLdb 目录下的 site.cfg 文件,注释掉 registry_key 并将 mysql_config 设置为:

      mysql_config = /usr/local/mysql-5.0.45-osx10.4-i686/bin/mysql_config

    5. 继续在 MySQLdb 目录中构建常规 Python 包:

      sudo python setup.py install

    6. 如果以上一切正常,在新终端中测试 MySQLdb:

      python -c "import MySQLdb"

    如果成功,上述内容不应返回任何内容。上面的示例显示了 OS 10.4 和 MySQL 5.0,将它们替换为您的正确工具版本。

    【讨论】:

    • mysql 10.6 dmg 还没有出,一旦发布,再试一试。
    • 感谢您的解决方案。它几乎可以在我的系统(OSX 10.7)上运行。但是我需要将 -arch x86_64 标志添加到编译器和链接器标志。这就是我需要从 MySQLdb-python 包中更改 setup_posix.py 的方式:在构建 ext_options 的部分中,我将 extra_compile_args = extra_compile_args 更改为 extra_compile_args = extra_compile_args + ['-arch',"x86_64"]extra_link_args = extra_link_args 更改为 @ 987654336@
    【解决方案2】:

    这很复杂而且很难,但它在 MacOSX Lion 上运行。

    您将使用:

    Xcode
    Brew
    Port
    Pip
    

    确保您已安装 Xcode(4.X),并且您的 mac 已配置为查找可执行文件,因为 Macports 在安装 mysql-python 的过程中将使用它。 p>

    确保已安装 Xcode 命令行工具

    启动 Xcode 应用 >> 首选项 >> 下载 >> 组件选项卡 >> 命令行工具 >> 点击安装

    从终端运行以下命令。

    xcodebuild -version

    如果您遇到此错误

    /usr/bin/xcodebuild -version Error: No developer directory found at /Developer

    尝试运行

    /usr/bin/xcode-select
    这将更新开发者目录路径。

    然后你需要手动切换到/Applications中新的Xcode安装目录:

    sudo /usr/bin/xcode-select -switch /Applications/Xcode.app
    

    Ref

    卸载 mysql [在这样做之前备份你的数据!]。

    sudo rm /usr/local/mysql
    sudo rm -rf /usr/local/mysql*
    sudo rm -rf /Library/StartupItems/MySQLCOM
    sudo rm -rf /Library/PreferencePanes/My*
    edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
    sudo rm -rf /Library/Receipts/mysql*
    sudo rm -rf /Library/Receipts/MySQL*
    sudo rm -rf /var/db/receipts/com.mysql.*
    

    使用brew重新安装Mysql:

    brew install mysql
    

    你可能会遇到这个错误。

    Error: Cannot write to /usr/local/Cellar
    

    fix

    你现在应该准备好了。

    sudo port install py27-mysql
    
    pip install mysql-python
    
    python -c "import MySQLdb"
    

    如果您没有看到任何错误 MySQLdb 已安装。

    【讨论】:

      【解决方案3】:

      是的,MySQLDb egg 是针对与系统中存在的版本不同的 libmysqlclient 版本编译的。您需要获得一个合适的 egg(卸载之前的)或从头开始构建 MySQLDb 以针对您系统中存在的库编译它。

      我不知道为什么,但我认为您的同事可能对这个问题感兴趣:

      Configuring Django to use remote mysql server?

      【讨论】:

        【解决方案4】:

        我在 OS X 10.6 上使用 Thierry 的 32 位 Python (2.6.5) 解决方案时遇到了问题。

        升级到 Python 2.7 64 位版本为我解决了这个问题。

        【讨论】:

        • 我已经在用 2.7 了,还是报错。
        【解决方案5】:

        尝试运行:

        easy_install -U distribute
        pip install --upgrade mysql-python
        

        注意: 如果你在编译的时候出现了丢失符号的错误,你需要有mysql开发库来编译它。

        在 Linux 上很容易安装:

        sudo apt-get install mysql-devel
        

        或:

        sudo yum install mysql-devel
        

        在 Mac 上,您可能需要下载 MySQL Connector,然后您可能必须传入 --with-mysql-libs 选项以指向解压 C 库时的目录。 或者您可以尝试将库放在默认目录中:/usr/lib64/mysql

        【讨论】:

          【解决方案6】:
          sudo apt-get install python-mysqldb
          

          确保它应该正确安装

          或者您可以使用其他替代方法,例如 easy_install

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-26
            • 2011-03-15
            • 2013-03-20
            • 2014-04-11
            • 1970-01-01
            • 2013-09-12
            • 2013-06-06
            • 2017-10-01
            相关资源
            最近更新 更多