Unable to install pyodbc on Linux
Asked Answered
C

19

117

I am running Linux (2.6.18-164.15.1.el5.centos.plus) and trying to install pyodbc. I am doing pip install pyodbc and get a very long list of errors, which end in

error: command 'gcc' failed with exit status 1

I looked in /root/.pip/pip.log and saw the following:

InstallationError: Command /usr/local/bin/python -c "import setuptools; file='/home/build/pyodbc/setup.py'; execfile('/home/build/pyodbc/setup.py')" install --single-version-externally-managed --record /tmp/pip-7MS9Vu-record/install-record.txt failed with error code 1

Has anybody had a similar issue installing pyodbc?

Chemaram answered 2/6, 2010 at 18:14 Comment(0)
C
65

I resolved my issue by following correct directions on pyodbc - Building wiki which states:

On Linux, pyodbc is typically built using the unixODBC headers, so you will need unixODBC and its headers installed. On a RedHat/CentOS/Fedora box, this means you would need to install unixODBC-devel:

yum install unixODBC-devel
Chemaram answered 2/6, 2010 at 18:27 Comment(3)
It fails for me...SyntaxError: invalid syntax File "/usr/libexec/urlgrabber-ext-down", line 28 except OSError, e: ^ SyntaxError: invalid syntax Exiting on user cancelManda
@Manda You upgraded you Linux distro?Chemaram
I am using Centos 7 and Linux 3.10.0-957.5.1.el7.x86_64. Are they known to have issues with pyodbc?Manda
C
239

On Ubuntu, you'll need to install unixodbc-dev:

sudo apt-get install unixodbc-dev

Install pip by using this command:

sudo apt-get install python-pip

once that is installed, you should be able to install pyodbc successfully:

pip install pyodbc
Condemn answered 31/1, 2012 at 21:44 Comment(4)
I needed to install python-devel too before this worked for me.Mckim
Yesssss!!! this was the fifth solution I used and the one that worked, thank you :)Timepiece
That worked! I got an error "Can't find package", but running sudo apt-get update first fixed it.Marie
For python 3.7 on Ubuntu additionally run sudo apt-get install python3.7-devRammer
C
65

I resolved my issue by following correct directions on pyodbc - Building wiki which states:

On Linux, pyodbc is typically built using the unixODBC headers, so you will need unixODBC and its headers installed. On a RedHat/CentOS/Fedora box, this means you would need to install unixODBC-devel:

yum install unixODBC-devel
Chemaram answered 2/6, 2010 at 18:27 Comment(3)
It fails for me...SyntaxError: invalid syntax File "/usr/libexec/urlgrabber-ext-down", line 28 except OSError, e: ^ SyntaxError: invalid syntax Exiting on user cancelManda
@Manda You upgraded you Linux distro?Chemaram
I am using Centos 7 and Linux 3.10.0-957.5.1.el7.x86_64. Are they known to have issues with pyodbc?Manda
F
43

Adding one more answer on this question. For Linux Debian Stretch release you would need to install the following dependencies:

apt-get update
apt-get install unixodbc-dev
pip install pyodbc

On Debian Slim some users mentioned they needed to add g++

apt-get update
apt-get install g++ unixodbc-dev
pip install pyodbc
Fonsie answered 17/8, 2018 at 11:52 Comment(5)
On Debian Slim image I needed to include g++ before I could install pyodbc.Afra
@Afra Yep, that's why the commands above include apt-get install g++ ;)Fonsie
Thank you so much, your answer works on my Debian GNU/Linux 9, the g++ is negligible though.Fairchild
I also needed g++ for Ubuntu 20.04. ThanksTricho
the specification for DEBIAN SLIM it's a gem!Precinct
E
18

Struggled with the same issue

After running: sudo apt-get install unixodbc-dev

I was able to pip install pyodbc

Ebarta answered 21/7, 2018 at 10:19 Comment(1)
This worked for me with python 3.7 on circleci's image.Thanet
I
17

Follow below steps to install pyodbc in any redhat version

yum install unixODBC unixODBC-devel
yum install gcc-c++
yum install python-devel
pip install pyodbc
Incontrovertible answered 20/2, 2017 at 11:35 Comment(0)
D
9

I have referenced this question several times, and gone on to actually find the answer I was looking for here: pyodbc wiki

To avoid gcc error on Ubuntu Linux, I did:

sudo aptitude install g++

I also installed the following 2 packages from Synaptic:

  • python-dev

  • tdsodbc

Dysentery answered 8/7, 2012 at 18:46 Comment(1)
Or if you're on an Ubuntu: sudo apt-get install g++ After that, I was able to pip install into my venv. Thanks!Manicotti
T
8

Execute the following commands (tested on centos 6.5):

yum install install unixodbc-dev
yum install gcc-c++
yum install python-devel
pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc
Therapsid answered 23/3, 2015 at 5:21 Comment(0)
A
8

According to official Microsoft docs for Ubuntu 18.04 you should run next commands:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
exit

If you are using python3.7, it is very important to run:

sudo apt-get install python3.7-dev

Adal answered 26/3, 2019 at 12:21 Comment(1)
Thank you. "pip3 install pyodbc" worked after the installation of the msodbc via official documantation on Ubuntu 20.04.Xylem
R
4

A easy way to install pyodbc is by using 'conda'. As conda automatically installs required dependencies including unixodbc.

conda --ugrade all (optional)

then conda install pyodbc

it will install following packages:

libgfortran-ng: 7.2.0-hdf63c60_3 defaults mkl: 2018.0.3-1 defaults mkl_fft: 1.0.2-py36_0 conda-forge mkl_random: 1.0.1-py36_0 conda-forge numpy-base: 1.14.5-py36hdbf6ddf_0 defaults pyodbc: 4.0.17-py36_0 conda-forge unixodbc: 2.3.4-1 conda-forge

Randle answered 15/6, 2018 at 8:46 Comment(0)
C
3

I had the same problem on CentOS 5.5

In addition to installing unixODBC-devel I also had to install gcc-c++

yum install gcc-c++
Cu answered 2/11, 2011 at 18:58 Comment(0)
K
3

In my case (Amazon Linux AMI) none of the above worked. The following worked (idea from here):

  • Find the path to the file cc1plus. For me it was in /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus. For you it may vary a bit. Try ls -l /usr/libexec/gcc to find the proper directory name and go ahead.
  • Find directories in your path: echo $PATH (for me it was /sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin)
  • Put a link to cc1plus in one of the directories in your PATH: sudo ln -s /PATH/TO/cc1plus /DIRinPATH/
    For example in my case:
    sudo ln -s /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus /usr/bin/
Kerek answered 17/9, 2019 at 21:50 Comment(1)
Have you tried maybe to get unixODBC+FreeTDS run on AWS Lambda?Farley
D
1

I needed all that, but I also needed python devel installed:

sudo yum install python-devel
Diena answered 8/6, 2013 at 12:44 Comment(0)
W
1

How about installing pyobdc from zip file? From How to connect to Microsoft Sql Server from Ubuntu using pyODBC:

Download source vs apt-get

The apt-get utility in Ubuntu does have a version of pyODBC. (version 2.1.7).
However, it is badly out-of-date (2.1.7 vs 3.0.6) and may not work well with the newer versions of unixODBC and freetds.
This is especially important if you are trying to connect to later versions of Microsoft Sql Server (2008 onwards).
It is recommended that you use the latest versions of unixODBC, freetds and pyODBC when working with the latest Microsoft Sql Server instead of relying on packages in apt-get.

Winna answered 3/7, 2014 at 6:6 Comment(3)
compilation terminated. error: command 'i686-linuxgnu-gccc' failed with exit status 1Winna
warning: command line option ä-Wstrict-prototypes' is valid for c/Objc but not for C++ [enabled by default]Winna
apt-get install aptitude aptitude install g++ apt-get install python-dev python ./setup.py installWinna
A
1

I know this is an old question, but the maintainer has a pyodbc GitHub Repo.

I also found a very good example for installing FreeTDS and setting up the config files.


Following the instructions on the GitHub docs seems to me to always be the best option. As of February, 2018, for CentOs7 (they have all flavors at the link) they say:

# Add the RHEL 6 library for Centos-7 of MSSQL driver. Centos7 uses RHEL-6 Libraries.
sudo su 
curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
exit

# Uninstall if already installed Unix ODBC driver
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts

# Install the  msodbcsql unixODBC-utf16 unixODBC-utf16-devel driver
sudo ACCEPT_EULA=Y yum install msodbcsql

#optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

# optional: for unixODBC development headers
sudo yum install unixODBC-devel

# the Microsoft driver expects unixODBC to be here /usr/lib64/libodbc.so.1, so add soft links to the '.so.2' files
cd /usr/lib64
sudo ln -s libodbccr.so.2   libodbccr.so.1
sudo ln -s libodbcinst.so.2 libodbcinst.so.1
sudo ln -s libodbc.so.2     libodbc.so.1

# Set the path for unixODBC
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
source ~/.bashrc

# Prepare a temp file for defining the DSN to your database server
vi /home/user/odbcadd.txt

[MyMSSQLServer]
Driver      = ODBC Driver 13 for SQL Server
Description = My MS SQL Server
Trace       = No
Server      = 10.100.1.10

# register the SQL Server database DSN information in /etc/odbc.ini
sudo odbcinst -i -s -f /home/user/odbcadd.txt -l

# check the DSN installation with:
odbcinst -j
cat /etc/odbc.ini

# should contain a section called [MyMSSQLServer]

# install the python driver for database connection
pip install pyodbc
Antrorse answered 6/2, 2018 at 5:40 Comment(1)
Hi Shubham, I'm sorry, I don't understand your question. After typing pip install pyodbc, assuming everything else went OK, you will have both the driver and the package installed and available. You would "simply use" the package, creating the connection object and the cursor similar to any other programmatic access to a DB. You can look at their documentation for examples.Antrorse
R
1

For archlinux/manjaro:

sudo pacman -S unixodbc

then:

sudo pip install pyodbc

or:

pip install pyodbc

You can upgrade your pip wheel setuptools before installing pyodbc (it won't affect the pyodbc installation) also with:

sudo python -m pip install --upgrade pip wheel setuptools

or

python -m pip install --upgrade pip wheel setuptools
Romeliaromelle answered 11/8, 2020 at 5:1 Comment(0)
S
0

I used this:

yum install unixODBC.x86_64

Depending on the version of centos could change the package, you can search like this:

yum search unixodbc
Stroboscope answered 16/4, 2018 at 13:46 Comment(0)
B
0

I faced with same issue. For python3.6.8 and ubuntu 16.04 none of above did not help me.

sudo apt-get install python3.6-dev

This solved my problem.

Bisectrix answered 25/1, 2019 at 8:51 Comment(0)
M
0
# pull official base image
FROM python:3.11-alpine

# install dependencies (g++ is required for pyodbc)
RUN apk update && apk add postgresql-dev gcc g++ unixodbc-dev python3-dev curl bash sudo

The above Dockerfile works for me.

Mannerheim answered 23/3, 2023 at 14:7 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Cuthbert
C
-1

I have unixodbc, unixodbc-dev and python3-dev all installed, but I still get

      In file included from src/buffer.cpp:12:
      src/pyodbc.h:56:10: fatal error: sql.h: No such file or directory
         56 | #include <sql.h>
            |          ^~~~~~~
      compilation terminated.
      error: command '/usr/bin/x86_64-unknown-linux-gnu-gcc' failed with exit code 1

gcc and g++ are installed as well.

I'm running pop-os 22.10. I've also checked that odbc.ini and odbcinst.ini exist as well and have FreeTDS installed.

Candice answered 23/5, 2022 at 6:37 Comment(1)
ok, found out the issue for me. For some reason PyCharm 2022.1.0 refused to deal with python3.10. The python terminal said 3.10, but the virtualenv always reset to 3.9.9. I reinstalled and got 2022.1.1 and it had no issue with 3.10 and pyodbc installed without a hitch. For those using Pycharm and pop-os, DO NOT install from the pop shop. The updates refused to work and via pycharm it has a permission error. Either way, what was happening was I was trying to install pyodbc with python3.9.9, but the system version of python was 3.10. This caused the compiler to have a fitCandice

© 2022 - 2024 — McMap. All rights reserved.