在 Mac OS X Lion 上安装 pymssql 时出错

Posted

技术标签:

【中文标题】在 Mac OS X Lion 上安装 pymssql 时出错【英文标题】:Error installing pymssql on Mac OS X Lion 【发布时间】:2012-02-06 14:37:55 【问题描述】:

我安装了 XCode 和 FreeTDS。我尝试连接到我的 SQL Server,它运行良好。

现在我必须在 python 上开发一个适用于该 SQL Server 的应用程序,并且我正在尝试安装 pymsql,但是当我启动 sudo python setup.py 命令时出现此错误:

==> sudo python setup.py install
running install
running bdist_egg
running egg_info
writing pymssql.egg-info/PKG-INFO
writing top-level names to pymssql.egg-info/top_level.txt
writing dependency_links to pymssql.egg-info/dependency_links.txt
reading manifest file 'pymssql.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pymssql.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.7-intel/egg
running install_lib
running build_ext
skipping '_mssql.c' Cython extension (up-to-date)
building '_mssql' extension
llvm-gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/sw/include -Ifreetds/nix_64/include -I/opt/local/include -I/opt/local/include/freetds -I/opt/local/freetds/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mssql.c -o build/temp.macosx-10.7-intel-2.7/_mssql.o -DMSDBLIB
_mssql.c: In function ‘__pyx_f_6_mssql_15MSSQLConnection_convert_python_value’:
_mssql.c:7322: warning: implicit conversion shortens 64-bit value into a 32-bit value
_mssql.c: In function ‘__pyx_f_6_mssql_15MSSQLConnection_get_result’:
_mssql.c:9554: warning: implicit conversion shortens 64-bit value into a 32-bit value
_mssql.c:9566: warning: implicit conversion shortens 64-bit value into a 32-bit value
_mssql.c: In function ‘__pyx_pf_6_mssql_20MSSQLStoredProcedure_2bind’:
_mssql.c:11146: warning: implicit conversion shortens 64-bit value into a 32-bit value
llvm-gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.7-intel-2.7/_mssql.o -L/sw/lib -Lfreetds/nix_64/lib -L/opt/local/lib -L/opt/local/lib/freetds -L/opt/local/freetds/lib -lsybdb -lrt -o build/lib.macosx-10.7-intel-2.7/_mssql.so
ld: warning: directory not found for option '-L/sw/lib'
ld: warning: directory not found for option '-L/opt/local/lib'
ld: warning: directory not found for option '-L/opt/local/lib/freetds'
ld: warning: directory not found for option '-L/opt/local/freetds/lib'
ld: library not found for -lrt
collect2: ld returned 1 exit status
ld: warning: directory not found for option '-L/sw/lib'
ld: warning: directory not found for option '-L/opt/local/lib'
ld: warning: directory not found for option '-L/opt/local/lib/freetds'
ld: warning: directory not found for option '-L/opt/local/freetds/lib'
ld: library not found for -lrt
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//cc6eQsIN.out (No such file or directory)
error: command 'llvm-gcc-4.2' failed with exit status 1

任何帮助或线索?

【问题讨论】:

您是否创建了文件夹:“/sw/lib”、“/opt/local/lib”...? 【参考方案1】:

不幸的是,pymssql 的 setup.py(截至版本 pymssql-2.0.0b1-dev-20111019)需要一些帮助才能在 OSX Lion 上正常工作。当前的 setup.py 尝试编译/链接一些预构建的 Linux FreeTDS 库,并尝试链接到 librt,这在 OSX 上不存在。此外,它仅从 Fink 或 MacPorts 显式查找 FreeTDS 库,因此如果您在非标准位置安装了 Homebrew(如果您使用 if)或 FreeTDS 本身,编译器/链接器可能无法找到它。

我创建了 setup.py here 的修复版本。使用标准位置(/usr/local/lib, include)的 FreeTDS 的 Homebrew 版本对我来说效果很好,但与 YMMV 一样。如果您已将 FreeTDS 安装在其他位置,则可能需要进一步调整 setup.py。您通常可以忽略来自链接器的有关缺少您系统上可能不存在的目录的警告:

ld:警告:找不到选项“-L/usr/local/lib/freetds”的目录

另一个注意事项:您可能已经为单一架构构建了 FreeTDS,可能是 x86_64。默认情况下,pymssl 将是一个多架构构建(假设您使用的是系统 Python 2.7.1),因此即使使用修补的 setup.py,您也会看到如下链接器警告:

ld:警告:忽略文件 /usr/local/lib/libsybdb.dylib,文件是为不受支持的文件格式构建的,该文件格式不是所链接的体系结构 (i386)

该警告仅表明 FreeTDS 库只有一个架构版本可以链接。您可以通过使用 ARCHFLAGS 进行仅 x86_64 构建来避免警告:

ARCHFLAGS="-arch x86_64" python setup.py install

【讨论】:

+1 良好的解释和指向 setup.py 的链接有助于让事情正常进行。【参考方案2】:

或者,试试这个 fork,它安装没有问题:

https://github.com/blackbass1988/pymssql-macos-lion

要在 OS X Mavericks 上安装,您需要

OS X 命令行工具

免费TDS

brew install freetds

赛通

pip install cython

最后你可以安装 pymssql-macoslion

pip install git+git://github.com/blackbass1988/pymssql-macos-lion.git@master

【讨论】:

【参考方案3】:

万一有人在读这篇文章,以下内容对我有用:

brew install freetds
sudo pip install pymssql

【讨论】:

以上是关于在 Mac OS X Lion 上安装 pymssql 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS X Lion 上安装 Python 库“gevent”

如何在 MAC OS X 10.7 Lion 上安装多个 XAMPP 版本或多个 PHP 版本

使用 Xcode 4.6 在 Mac OS X Lion (10.8.2) 上安装 OpenCV [关闭]

如何在Mac OS X上安装 Ruby运行环境

phpize 无法在 Mac OS X Lion 上运行

在 Mac OS X Lion 上设置 MySQLdb 以支持 Django 时遇到问题