Nie można zainstalować pyodbc w systemie Linux


84

Używam Linuksa (2.6.18-164.15.1.el5.centos.plus) i próbuję zainstalować pyodbc. Robię pip install pyodbc i otrzymuję bardzo długą listę błędów, które kończą się na

błąd: polecenie „gcc” nie powiodło się z kodem zakończenia 1

Zajrzałem do /root/.pip/pip.log i zobaczyłem co następuje:

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 nie powiodło się z kodem błędu 1

Czy ktoś miał podobny problem z instalacją pyodbc?

Odpowiedzi:


160

W Ubuntu musisz zainstalować unixodbc-dev:

sudo apt-get install unixodbc-dev

Zainstaluj pip za pomocą tego polecenia:

sudo apt-get install python-pip

po zainstalowaniu powinieneś być w stanie pomyślnie zainstalować pyodbc:

pip install pyodbc

1
Musiałem też zainstalować python-devel, zanim to zadziałało.
Mike

Tak !!! to było piąte rozwiązanie, którego użyłem i które zadziałało, dziękuję :)
fanny

To się udało! Pojawił się błąd „Nie można znaleźć pakietu”, ale uruchomienie sudo apt-get update najpierw go naprawiło.
ChrisE

1
Dla Pythona 3.7 na Ubuntu dodatkowo uruchomsudo apt-get install python3.7-dev
Milos Grujic

58

Rozwiązałem swój problem, postępując zgodnie z poprawnymi wskazówkami na pyodbc - Building wiki, która mówi:

W Linuksie pyodbc jest zwykle budowany przy użyciu nagłówków unixODBC, więc będziesz potrzebować zainstalowanego unixODBC i jego nagłówków. W przypadku RedHat / CentOS / Fedora oznacza to, że musisz zainstalować unixODBC-devel:

yum install unixODBC-devel

Nie udaje mi się ... Błąd składni: nieprawidłowa składnia Plik "/ usr / libexec / urlgrabber-ext-down", wiersz 28 z wyjątkiem OSError, e: ^ SyntaxError: nieprawidłowa składnia Wyjście po anulowaniu przez użytkownika
famargar

@famargar Zaktualizowałeś dystrybucję Linuksa?
IgorGanapolsky

Używam Centos 7 i Linux 3.10.0-957.5.1.el7.x86_64. Czy wiadomo, że mają problemy z pyodbc?
famargar

21

Dodam jeszcze jedną odpowiedź na to pytanie. W przypadku wydania Linux Debian Stretch należy zainstalować następujące zależności:

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

W obrazie Debiana Slim potrzebowałem dołączyć g ++, zanim zainstalowałem pyodbc.
Snympi

@Snympi Tak, dlatego powyższe polecenia obejmują apt-get install g++;)
Alexis.Rolland

1
Dziękuję bardzo, twoja odpowiedź działa na moim Debianie GNU / Linux 9, chociaż g ++ jest znikomy.
CK

15

Wykonaj poniższe kroki, aby zainstalować pyodbc w dowolnej wersji redhat

yum install unixODBC unixODBC-devel
yum install gcc-c++
yum install python-devel
pip install pyodbc

11

Walczyłem z tym samym problemem

Po bieganiu: sudo apt-get install unixodbc-dev

Udało mi się zainstalować pip install pyodbc


To zadziałało dla mnie z Pythonem 3.7 na obrazie Circleci.
archae0pteryx

8

Wykonaj następujące polecenia (przetestowane na 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

6

Odwoływałem się do tego pytania kilka razy i poszedłem znaleźć odpowiedź, której szukałem tutaj: pyodbc wiki

Aby uniknąć błędu gcc w systemie Ubuntu Linux, zrobiłem:

sudo aptitude install g++

Zainstalowałem również następujące 2 pakiety z Synaptic:

  • python-dev

  • tdsodbc


Lub jeśli korzystasz z Ubuntu: sudo apt-get install g++po tym mogłem zainstalować pip w moim venv. Dzięki!
cheevahagadog

3

Miałem ten sam problem na CentOS 5.5

Oprócz zainstalowania unixODBC-devel musiałem również zainstalować gcc-c ++

yum install gcc-c++

3

Prostym sposobem na zainstalowanie piodbc jest użycie „conda”. Jako conda automatycznie instaluje wymagane zależności, w tym unixodbc.

conda --ugrade all (opcjonalny)

następnie conda install pyodbc

zainstaluje następujące pakiety:

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


3

Zgodnie z oficjalną dokumentacją Microsoft dla Ubuntu 18.04 powinieneś uruchomić następujące polecenia:

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

Jeśli używasz python3.7, bardzo ważne jest, aby uruchomić:

sudo apt-get install python3.7-dev


1

Potrzebowałem tego wszystkiego, ale potrzebowałem też zainstalowanego Pythona Devel:

sudo yum install python-devel

1

Co powiesz na instalację pyobdc z pliku zip? Od Jak połączyć się z serwerem Microsoft Sql z Ubuntu przy użyciu pyODBC :

Pobieranie źródła vs apt-get

Narzędzie apt-get w Ubuntu ma wersję pyODBC. (wersja 2.1.7).
Jednak jest bardzo nieaktualny (2.1.7 vs 3.0.6) i może nie działać dobrze z nowszymi wersjami unixODBC i freetds.
Jest to szczególnie ważne, jeśli próbujesz połączyć się z nowszymi wersjami Microsoft Sql Server (od 2008).
Podczas pracy z najnowszym serwerem Microsoft Sql zaleca się używanie najnowszych wersji unixODBC, freetds i pyODBC zamiast polegania na pakietach w apt-get.


1
kompilacja zakończona. błąd: polecenie `` i686-linuxgnu-gccc '' nie powiodło się z kodem zakończenia 1
jarppa79

ostrzeżenie: opcja wiersza poleceń ä-Wstrict-prototypes 'jest ważna dla c / Objc, ale nie dla C ++ [domyślnie włączona]
jarppa79

apt-get install aptitude aptitude install g ++ apt-get install python-dev python ./setup.py install
jarppa79

1

Wiem, że to stare pytanie, ale opiekun ma pyodbcrepozytorium GitHub .

Znalazłem również bardzo dobry przykład instalacji FreeTDS i konfiguracji plików konfiguracyjnych .


Postępowanie zgodnie z instrukcjami w dokumentacji GitHub wydaje mi się zawsze najlepszą opcją. Od lutego 2018 roku dla CentOs7 (mają wszystkie smaki pod linkiem) mówią:

# 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

Cześć Shubham, przepraszam, nie rozumiem twojego pytania. Po wpisaniu pip install pyodbc, zakładając, że wszystko inne poszło dobrze, będziesz mieć zainstalowany i dostępny zarówno sterownik, jak i pakiet. Możesz „po prostu użyć” pakietu, tworząc obiekt połączenia i kursor podobnie do każdego innego programistycznego dostępu do bazy danych. Przykłady można znaleźć w ich dokumentacji .
Mike Williamson

1

Miałem ten sam problem. W przypadku Pythona3.6.8 i Ubuntu 16.04 żadne z powyższych nie pomogło mi.

sudo apt-get install python3.6-dev

To rozwiązało mój problem.


1

W moim przypadku ( Amazon Linux AMI ) żadne z powyższych nie działało. Działały (pomysł stąd ):

  • Znajdź ścieżkę do pliku cc1plus. Dla mnie to było /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus. Dla Ciebie może się to nieco różnić. Próbowaćls -l /usr/libexec/gcc znaleźć właściwą nazwę katalogu i idź dalej.
  • Znajdź katalogi na swojej ścieżce: echo $PATH(dla mnie to było/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin )
  • Umieść link do cc1plusw jednym z katalogów w swojej PATH: sudo ln -s /PATH/TO/cc1plus /DIRinPATH/
    Na przykład w moim przypadku:
    sudo ln -s /usr/libexec/gcc/x86_64-amazon-linux/4.8.5/cc1plus /usr/bin/

1

Archlinux / Manjaro:

sudo pacman -S unixodbc

następnie:

sudo pip install pyodbc

lub:

pip install pyodbc

Możesz zaktualizować swoje narzędzia konfiguracyjne pip wheel przed zainstalowaniem pyodbc (nie wpłynie to na instalację piodbc) również za pomocą:

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

lub

python -m pip install --upgrade pip wheel setuptools

0

Użyłem tego:

yum install unixODBC.x86_64

W zależności od wersji centos może zmienić pakiet, możesz wyszukiwać w ten sposób:

yum search unixodbc

0

Te 2 polecenia z tego miejsca działały dla mnie w RHEL 8

sudo dnf install redhat-rpm-config gcc-c++ python3-devel unixODBC-devel
pip3 install --user pyodbc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.