mac - pip 安装 pymssql 错误

Posted

技术标签:

【中文标题】mac - pip 安装 pymssql 错误【英文标题】:mac - pip install pymssql error 【发布时间】:2016-10-12 18:58:41 【问题描述】:

我使用 Mac (OS X 10.11.5)。我想为 python 安装模块pymssql。 在Terminal.app 中,我输入sudo -H pip install pymssqlpip install pymssqlsudo pip install pymssql。但是出现错误。

目录/Users/janghyunsoo/Library/Caches/pip/http 或其父目录不属于当前用户,缓存已被禁用。请检查该目录的权限和所有者。如果使用sudo 执行pip,您可能需要sudo-H 标志。

目录/Users/janghyunsoo/Library/Caches/pip 或其父目录不归当前用户所有,缓存轮已被禁用。检查该目录的权限和所有者。如果使用sudo 执行pip,您可能需要sudo-H 标志。

Collecting pymssql
  Downloading pymssql-2.1.2.tar.gz (898kB)
    100% |████████████████████████████████| 901kB 955kB/s 
Installing collected packages: pymssql
  Running setup.py install for pymssql ... error
    Complete output from command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-build-KA5ksi/pymssql/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-A3wRBy-record/install-record.txt --single-version-externally-managed --compile:
    setup.py: platform.system() => 'Darwin'
    setup.py: platform.architecture() => ('64bit', '')
    setup.py: platform.libc_ver() => ('', '')
    setup.py: Detected Darwin/Mac OS X.
        You can install FreeTDS with Homebrew or MacPorts, or by downloading
        and compiling it yourself.
    
        Homebrew (http://brew.sh/)
        --------------------------
        brew install freetds
    
        MacPorts (http://www.macports.org/)
        -----------------------------------
        sudo port install freetds
    
    setup.py: Not using bundled FreeTDS
    setup.py: include_dirs = ['/usr/local/include', '/opt/local/include', '/opt/local/include/freetds']
    setup.py: library_dirs = ['/usr/local/lib', '/opt/local/lib']
    running install
    running build
    running build_ext
    building '_mssql' extension
    creating build
    creating build/temp.macosx-10.6-intel-2.7
    /usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/opt/local/include -I/opt/local/include/freetds -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mssql.c -o build/temp.macosx-10.6-intel-2.7/_mssql.o -DMSDBLIB
    _mssql.c:18924:15: error: use of undeclared identifier 'DBVERSION_80'
        __pyx_r = DBVERSION_80;
                  ^
    1 error generated.
    error: command '/usr/bin/clang' failed with exit status 1
    
    ----------------------------------------
Command "/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-build-KA5ksi/pymssql/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-A3wRBy-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-build-KA5ksi/pymssql/

【问题讨论】:

有什么解决办法吗?我也面临同样的问题 每次使用pip,至少有一个错误。每一次。 【参考方案1】:

在运行 pip 安装之前,我可以通过 Homebrew 恢复到旧版本的 FreeTDS 来解决这个问题。

brew unlink freetds; brew install homebrew/versions/freetds091

andrewmwhite 在以下位置找到了解决方案: https://github.com/pymssql/pymssql/issues/432

【讨论】:

在 os x el capitan 10.11.5 上完美运行 Homebrew/versions 现在已弃用,但下面的答案效果很好。【参考方案2】:

“brew install homebrew/python/pymssql”也有效,但从今天起将安装较旧的 2.1.1。

【讨论】:

仅供参考 - 历史上已知与 Anaconda 的冲突或 conda 不确定是否所有问题都已解决,但请注意此处以防有人遇到问题。【参考方案3】:

投票最多的解决方案对我不起作用,因为 brew 没有自行链接旧版本的 freetds。我这样做是为了解决问题:

brew unlink freetds; 
brew install freetds@0.91;
brew link --force freetds@0.91

【讨论】:

用 python 3.6 为我解决了这个问题。谢谢! 解决了我的问题。非常感谢! 在 macOS high sierra 上使用 python 3.6 为我工作,除了我必须在“brew link --”之前手动删除 /usr/local/etc/ 下的 freetds.conf、locales.conf、pool.conf强制 freetds@0.91"【参考方案4】:

在http://gree2.github.io/python/setup/2017/04/19/python-instal-pymssql-on-mac上逐步安装pymssql找到了详细而简单的答案。

    brew unlink freetds; brew install homebrew/core/freetds091 brew link --force freetds@0.91 pip install pymssql

【讨论】:

【参考方案5】:

找到了 pip/python2 & pip3/python3 的解决方案

问题:

在 @siva 和 @himanshu 解决方法适用于 python2 但不适用于 python3 之后,我无法从 pip3 成功构建。

pip3 install pymssql

    ..._mssql.c:21155:15: error: use of undeclared identifier 'DBVERSION_80'
        __pyx_r = DBVERSION_80;
                  ^
    1 error generated.
    error: command 'clang' failed with exit status 1

您的问题不是权限问题,而是pymssql 的依赖代码的代码编译问题。

Here's the discussion, 我在哪里找到Solution on github.

此时它已经存在了一段时间,只是为了可见性而放在这里。

只需使用来自 gitub 的最新版本的 pymssql:

    pip3 install git+https://github.com/pymssql/pymssql

也适用于 python2

    pip install git+https://github.com/pymssql/pymssql

    pip2 install git+https://github.com/pymssql/pymssql

我在Mac OS X (10.13.6) & Homebrew (1.7.1-62-gddbefee) 上测试过多次。 该命令适用于 freetds (0.91) 或 (1.00.94) 的两个版本

【讨论】:

【参考方案6】:

这在 mac 上对我有用:

pip install cython

然后

pip install git+https://github.com/pymssql/pymssql.git

【讨论】:

【参考方案7】:

上述所有解决方案都运行良好。请注意,pymssql pip install pymssql 的 setup.py 预计 Homebrew 已在您的机器上的 /sw 安装 Freetds。

我的机器不是这种情况,所以我不得不在这里使用工作:

    手动下载 pymssql 的 .tar 文件 打开 setup.py 编辑变量 fink 以将路径添加到您计算机上实际安装 Freetds 的位置。
if sys.platform == 'darwin':
     fink = '<path to Freetds on your Machine>' 
    然后运行python setup.py install

【讨论】:

以上是关于mac - pip 安装 pymssql 错误的主要内容,如果未能解决你的问题,请参考以下文章

pymssql:Mac OS 中的软件包安装失败

解决mac下安装pymssql问题

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

麻烦在 MacOS Mojave 上安装 pymssql

尝试使用 pip 在 ubuntu 12.04 上安装 pymssql

在 MAC 错误消息“命令“python setup.py egg_info”上安装 Django 失败,错误代码 1 在 /private/tmp/pip-build-2yOWor/django/”