【问题标题】:mysqldb build errormysqldb构建错误
【发布时间】:2009-12-02 20:43:03
【问题描述】:

我记得在我的 32 位 Mac 上使用 Leopard 10.5.7 安装 Python + Django + MySQL + MySQLdb。 我用 Mac Snow Leopard 尝试了同样的程序。但不幸的是遇到了很多错误...... 我不知道,但奇怪的事情正在发生。请看错误日志:

Amit-Vermas-MacBook:mysql-python-1.2.2 amitverma$ python setup.py build
running build
running build_py
copying MySQLdb/release.py -> build/lib.macosx-10.3-i386-2.5/MySQLdb
running build_ext
building '_mysql' extension
creating build/temp.macosx-10.3-i386-2.5
gcc-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -O3 -Dversion_info=(1,2,2,'final',0) -D__version__=1.2.2 -I/usr/local/mysql/include -I/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -c _mysql.c -o build/temp.macosx-10.3-i386-2.5/_mysql.o -g -Os -arch x86_64 -fno-common -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -DDONT_DECLARE_CXA_PURE_VIRTUAL
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:57,
                 from pymemcompat.h:10,
                 from _mysql.c:29:
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyport.h:761:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
In file included from _mysql.c:35:
/usr/local/mysql/include/my_config.h:1050:1: warning: "HAVE_WCSCOLL" redefined
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8,
                 from pymemcompat.h:10,
                 from _mysql.c:29:
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:721:1: warning: this is the location of the previous definition
In file included from _mysql.c:35:
/usr/local/mysql/include/my_config.h:1168:1: warning: "SIZEOF_LONG" redefined
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8,
                 from pymemcompat.h:10,
                 from _mysql.c:29:
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:811:1: warning: this is the location of the previous definition
In file included from _mysql.c:35:
/usr/local/mysql/include/my_config.h:1177:1: warning: "SIZEOF_PTHREAD_T" redefined
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8,
                 from pymemcompat.h:10,
                 from _mysql.c:29:
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:820:1: warning: this is the location of the previous definition
error: command 'gcc-4.0' failed with exit status 1
Amit-Vermas-MacBook:mysql-python-1.2.2 amitverma$ 

【问题讨论】:

  • 在 Serverfault 上提问,SO 的姊妹站点:serverfault.com
  • 不。这是一个编程问题。程序员比系统管理员更可能知道这些问题。

标签: python django macos osx-snow-leopard


【解决方案1】:

这是我个人的 makefile 规则

MYSQLDB_VERSION=1.2.3c1
MYSQLDB_TARGET=$(BUILD_FLAGS_DIR)/mysqldb
MYSQLDB_PACKAGE=MySQL-python-$(MYSQLDB_VERSION).tar.gz
MYSQLDB_PACKAGE_URL=http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/$(MYSQLDB_VERSION)/$(MYSQLDB_PACKAGE)

.PHONY: mysqldb mysqldb-download
mysqldb: $(MYSQLDB_TARGET)
mysqldb-download: $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE)

$(MYSQLDB_TARGET): $(INIT_TARGET) $(MYSQLDB_DEPS) $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE)
    -rm -rf $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION)
    tar -m -C $(UNPACK_DIR) -xzvf $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE)
    -cd $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION); \
    for patch in $(PATCH_DIR)/mysqldb-$(MYSQLDB_VERSION)_$(ARCH)_*; \
        do patch -p1 < $$patch; \
    done
    cd $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION); export CC="gcc -m64" FC="g95 -m64" CPPFLAGS="-I$(RUNTIME_DIR)/include" CFLAGS="-m64 -I$(RUNTIME_DIR)/include" LD_LIBRARY_PATH=$(RUNTIME_DIR)/lib64:$(RUNTIME_DIR)/lib:$$LD_LIBRARY_PATH PATH=$(RUNTIME_DIR)/bin:$$PATH PYTHONPATH=$(RUNTIME_DIR)/lib/python2.5/site-packages/; $(RUNTIME_DIR)/bin/python2.5 setup.py install --prefix=$(RUNTIME_DIR)
    touch $(MYSQLDB_TARGET)

$(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE):
    for package in $(MYSQLDB_PACKAGE_URL); \
    do \
        echo -n "Downloading $$package... ";  \
        cd $(DOWNLOAD_DIR); curl -L -O $$package; \
        echo "done"; \
    done
    touch $@

ALL_RUNTIME_TARGETS+=$(MYSQLDB_TARGET)
ALL_DOWNLOAD_TARGETS+=$(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE)

还有一个补丁

$ more mysqldb-1.2.3c1_x86_64-apple-darwin10_patch-000 
diff -Naur MySQL-python-1.2.3c1/setup.py MySQL-python-1.2.3c1.new/setup.py
--- MySQL-python-1.2.3c1/setup.py       2008-10-18 02:12:31.000000000 +0200
+++ MySQL-python-1.2.3c1.new/setup.py   2009-10-08 22:59:05.000000000 +0200
@@ -13,6 +13,8 @@
     from setup_windows import get_config

 metadata, options = get_config()
+options["extra_compile_args"].remove("-arch")
+options["extra_compile_args"].remove("x86_64")
 metadata['ext_modules'] = [Extension(sources=['_mysql.c'], **options)]
 metadata['long_description'] = metadata['long_description'].replace(r'\n', '')
 setup(**metadata)

它对我有用。我不能保证,但是……也许你会在里面找到一些有趣的提示。

请注意,我使用的是自定义编译器(由于过时的原因太难看,无法深入研究)

【讨论】:

  • 嘿,斯蒂法诺。恐怕这对我来说都是希腊语。我处于一个相当初级的阶段,上面的话只是吓到我。我在以前的 10.5.7 Mac 上成功地做到了这一点。现在我有了 10.6 Snow Leopard,生活就变成了地狱。我认为这与 64 位有关。
【解决方案2】:

最可能的解释是您试图将 64 位版本的 MySQL 库与仅 32 位版本的 Python 链接(目前,OS X 的所有 python.org 安装程序都是 32 位的只要)。 (您可以通过对/usr/local/mysql/ 中的库文件使用file 命令来验证这一点。

一些解决方案:

  • 使用 Apple 提供的 python2.6 64位的雪豹

  • 安装 32 位版本的 MySQL 库

  • 使用MacPorts安装完整的解决方案:install the base MacPorts infrastructure,然后安装MySQLdb adapter for python 2.6(或2.5),它还将安装所有必要的依赖项,包括一个新的 python 和 MySQL 客户端库应该都可以正常工作(并且是 可以被MacPorts更新):

    sudo port install py26-mysql # or py25-mysql

对于在OS X 上使用MySQL 和python,我推荐最后一个解决方案,即除非你真的喜欢并且有时间进行包管理和安装。从长远来看,它可能会为您省去很多麻烦。

附: MacPorts 还包括djangoPIL 的端口:

sudo port install py26-django py26-pil

编辑:

要走MacPorts 路线,请按照我给here 的说明删除python.org 安装程序python 的影响。不要试图删除或修改/usr/bin/System/Library 中Apple 安装的Python 文件;它们是OS X 的一部分。然后按照上面引用的说明安装MacPorts。为了避免干扰 Apple 或第三方安装,MacPorts 将其所有文件安装到以/opt/local 为根的完全独立的目录结构中。因此,您需要修改您的.bash_profile 以将/opt/local/bin 添加到您的$PATH。如果您希望首先找到 MacPorts 版本,请添加如下内容:

export PATH="/opt/local/bin:${PATH}"

当你开始一个新的终端会话时,你应该在python2.6 找到MacPorts python2.6。如果你还想让命令python 指向那里:

$ sudo port install python_select
$ sudo python_select -l
Available versions:
current none python26 python26-apple
$ sudo python_select python26

【讨论】:

  • 我最初安装的是 32 位版本的 MySQL。它没有用。然后我切换到 64 位的。在此过程中,我已经从 python 2.5.4 切换到 2.6.4 以及介于两者之间的所有内容:) 它真的让我和我的 mac 感到困惑。但我认为你说得有道理。现在我想做干净的重新安装。有没有办法删除系统上安装的所有python版本然后重新安装?
【解决方案3】:

以下博客文章帮助我在 Mac 上编译 MySQLdb 1.2.2: http://www.mangoorange.com/2008/08/01/installing-python-mysqldb-122-on-mac-os-x/

但是,后来我尝试了 MySQLDB 1.2.3c1,并且开箱即用地编译没有任何问题。 1.2.2 已经有好几年了,在 Python 2.6 上会出现弃用警告。我只是切换到 1.2.3.c1 看看是否适合你。

1.2.3c1 是 PyPi 上的最新版本。

【讨论】:

    【解决方案4】:

    您似乎需要重新安装/更新 XCode(构建工具)

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2017-01-25
      • 2011-10-20
      • 2023-04-11
      • 2016-01-11
      • 2015-12-27
      • 1970-01-01
      • 2012-05-07
      • 2012-07-11
      相关资源
      最近更新 更多