web-dev-qa-db-ja.com

OSX 10.9(Mavericks)でpyodbcのインストールが失敗する

pip install pyodbc、私は得る

In file included from .../build/pyodbc/src/buffer.cpp:12:
    .../build/pyodbc/src/pyodbc.h:52:10: fatal error: 'sql.h' file not found
    #include <sql.h>
             ^
    1 error generated.
    error: command 'cc' failed with exit status 1

Mavericksには/ usr/includeの下にsql.hがないようです

誰がpyodbcをインストールできましたか?既知の回避策はありますか?

37
Moshe

お気づきのとおり、OSX MavericksはPyODBCコンパイルに必要なsqlヘッダーを削除しました。次の手順に従って、PyODBCをインストールできました。

  1. IODBCライブラリがインストールされていることを確認してください( http://www.iodbc.org/
  2. IODBCソースをダウンロードして抽出する
  3. pip install --no-install pyodbcを実行します
  4. cd [VIRTUAL_ENV]/build/pyodbc
  5. python setup.py build_ext --include-dirs=[LIBIODBC_SOURCES]/include/を実行します
  6. pip install --no-download pyodbcを実行します:

    Installing collected packages: pyodbc
      Running setup.py install for pyodbc
    
        warning: no files found matching 'tests/*'
    Successfully installed pyodbc
    Cleaning up...
    

[libiodbc_sources]/include/の下にあるファイルを/usr/includeにコピーしてpip install pyodbcを実行することもできますが、システムフォルダーに手動でファイルを追加したくありませんでした。

33
m_vitaly

Homebrew を使用してunixodbcをインストールしてから、通常の方法でpipを介してpyodbcをインストールできます。

brew install unixodbc && pip install pyodbc

これはマーベリックスで私のために動作します。

58
Ryan Balfanz

多くの行き止まりの後、これは私のために働いた:

$ brew unlink unixodbc
$ brew install unixodbc  --universal
$ Sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc
30
dennisobrien

インストール手順 を参照してください。これは、提供されている他の回答の無益な試みの後に書いたものです。

まず、次のライブラリをインストールします。

$ brew install unixodbc
$ brew install freetds --with-unixodbc

FreeTDSは設定なしですでに動作しているはずです:

$ tsql -S [IP or hostname] -U [username] -P [password]
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> ^D

UnixODBCで、ドライバーにリンクし、/usr/local/etc/odbcinst.iniを編集する必要があります。

[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
FileUsage = 1

使用しているテストコマンドではDSNを構成する必要があるため、/usr/local/etc/odbc.iniを編集します。

[MYDSN]
Driver = FreeTDS
Server = [IP address]
Port = 1433

DNSの構成は異なる場合があり、TDS_VersionまたはServernameディレクティブが必要になる場合があります。上記は、SQL Server 2008 R2で機能しました。次に、テストコマンドを実行します。

$ isql MYDSN [username] [password] -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> ^D

テストが成功した場合、Python library pyodbc。のインストールを続行できます。現在のバージョン(3.0.7)はOS XのunixODBCとリンクしないため、 setup.pyに変更を加える必要があります。ソースパッケージをダウンロードして、どこかに展開します。次の行(146-147)を見つけます。

    Elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.

そして、この行を変更します:

        settings['libraries'].append('iodbc')

に:

        settings['libraries'].append('odbc')

次に、次のコマンドを実行してインストールします。

> python install .

これでpyodbcが動作するはずです:

import pyodbc
pyodbc.connect('DSN=MYDSN;UID=[username];PWD=[password]')

odbc.iniでDSNを構成する必要はありませんので、そのファイルをクリアしてください。おそらく接続時にデータベースを選択したいので、接続行を次のように変更します:

pyodbc.connect('DRIVER=FreeTDS;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')

次のように、odbcinst.iniを使用する代わりに、FreeTDSのライブラリファイルにリンクすることもできます。

pyodbc.connect('DRIVER=/usr/local/lib/libtdsodbc.so;SERVER=[IP address];PORT=1433;DATABASE=[database];UID=[username];PWD=[password]')
14
Bouke

@Vitalyの答えには喜びがありませんでした。ハードリンクのサポートが不足しているため、Mavericksでパッケージをビルドする際に問題があるようです。ビルドするパッケージを取得できませんでした。

そこで、必要なファイルを[libiodbc_sources]/include/ディレクトリから/usr/includeにコピーするという@Vitalyの2番目の提案を選択し、インストールは成功しました。コピーする必要があるファイルのリストは次のとおりです。

  • sql.h
  • sqltypes.h
  • iodbcunix.h
  • sqlext.h
  • sqlucode.h
10
MFB

これは、提案された他のすべてのことを試した後、私にとってはうまくいきました。

brew install unixodbc
Sudo pip install --upgrade --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" --allow-external pyodbc --allow-unverified pyodbc pyodbc

Mac OS 10.11.1、Homebrew 0.9.5およびpip 7.1.2の実行

9
Lothilius

次のようなエラーが表示される場合

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

問題は、MavericksではAppleがコマンドライン開発者ツールからgccを削除したことです;現在clangjustsymlinkedtogcc--mno-fused-maddフラグはclangでサポートされていません(他の多くのフラグにも同じことが言えます)。

1つの解決策は、homebrewまたは別の方法を使用してgccをインストールし、/ usr/bin/gccを適切なgccにシンボリックリンクすることです。

私のために働いたより簡単な回避策は、これらのエラーを警告に変えることで抑制することです:

export CFLAGS=-Qunused-arguments

設定後、pip install pyodbcエラーなし。

PS! clangの将来のバージョンでは、これは不可能になる可能性があります。少なくともそれで動作します:

$> gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-Apple-darwin13.1.0
Thread model: posix

参照:
https://bitbucket.org/cffi/cffi/issue/46/unused-mno-fused-madd-clang-warnings-on-oshttps:/ /coderwall.com/p/lqpp8wclang:error:unsupported option '-static-libgcc' on Mac OSX Mavericks

2
asbjornenge

Sudo port install py-pyodbcで成功しました

1
Brian

Mac OS Xですべてのプロセスを実行しました。 pyodbcからMS SQL Server 2014への接続。全体のプロセスは次のとおりです。

接続パイプライン:

pyodbc ----> iodbc ----> freetds ----> MS SQL Server 2014
  1. Freetds(SQL Serverドライバー/コネクター)をビルドします。

    ./configure --prefix=/usr/local --with-tdsver=8.0
    
    make
    
    Sudo make install
    
    // you should see /usr/local/lib/libtdsodbc.so was generated
    
    //test method 1:
    
    TDSVER=8.0 tsql -H hostname -p 1433 -U username -P XXX -D databasename
    
    //test method 2:
    
    //config /usr/local/etc/freetds.conf
    [mssqlserver]
        Host = XXX
        port = 1433
        tds version = 8.0
    
    //run
    
    tsql -S mssqlserver -U username -P XXX -D databasename  
    
    //if you can run sql, good to go!
    
  2. ビルドiodbc(ODBCマネージャー):

    //download from github, go to the folder
    
    cd mac
    
    ./configure 
    
    ./make
    
    Sudo ./make install
    
    //config /usr/local/etc/odbc.ini
    [mssqlserver]
    Driver=/usr/local/lib/libtdsodbc.so
    TDS_Version=8.0
    Server=xxxx
    Port = 1433
    Trace = Yes
    Description=XXX
    
    //test
    
    which iodbctest
    
    iodbctest 
    
    DSN=masqlserver;UID=xxx;PWD=xxx
    
    //if you can run sql, good to go!
    
  3. Pyodbc(Python ODBC wrapper))をiodbcに接続します。

    pip install pyodbc 
    
    //in python,
    
    conn = pyodbc.connect("DSN=mssqlserver;UID=xxx;PWD=xxxx") 
    
1
Hongli Deng

pip--no-installオプションをサポートしなくなったため、--downloadオプションは廃止されました。次の手順に従う必要がありました。

pip download pyodbc
tar -zxvf pyodbc-4.0.17.tar.gz
python setup.py build_ext --include-dirs=[DIRECTORY CONTAINING THE HEADERS]
pip install pyodbc
0
bfaskiplar

これに$ 0.02を追加します。 Vitalyの答えが主なインスピレーションでした。

OSX 10.9.5、MacPorts 2.3.4、pip 8.1.2(--no-installオプションがありませんでした)、virtualenv 14.0.6

また助けました: https://stackoverflow.com/a/22942120/139435

とにかく、MacPorts経由でiODBCをインストールします

Sudo port install libiodbc

欠落しているsql.hはMacPorts @/ opt/local/includeによってデポジットされます

ここで、インクルードを見つけることができる場所をpipに伝えます(リンクされた回答が役に立ちました)。

pip install pyodbc --global-option=build_ext --global-option="-I/opt/local/include/"

0
JL Peyret