Помилка спроби встановити Postgres для python (psycopg2)


81

Я намагався встановити psycopg2 у моє середовище, але я отримую таку помилку:

(venv)avlahop@apostolos-laptop:~/development/django/rhombus-dental$ sudo pip install psycopg2
Downloading/unpacking psycopg2,
Downloading psycopg2-2.5.2.tar.gz (685kB): 685kB downloaded
Running setup.py egg_info for package psycopg2

Installing collected packages: psycopg2
  Running setup.py install for psycopg2
    building 'psycopg2._psycopg' extension
    x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall Wstrict-prototypes -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.2 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x09010D -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/usr/include/python2.7 -I. -I/usr/include/postgresql -I/usr/include/postgresql/9.1/server -c psycopg/psycopgmodule.c -o build/temp.linux-x86_64-2.7/psycopg/psycopgmodule.o -Wdeclaration-after-statement
    In file included from psycopg/psycopgmodule.c:27:0:
    ./psycopg/psycopg.h:30:20: fatal error: Python.h: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
     #include <Python.h>
                    ^
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    Complete output from command /usr/bin/python -c "import setuptools;__file__='/tmp/pip_build_root/psycopg2/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-SgfQCA-record/install-record.txt --single-version-externally-managed:
running install

running build

running build_py

creating build

creating build/lib.linux-x86_64-2.7

creating build/lib.linux-x86_64-2.7/psycopg2

copying lib/pool.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/errorcodes.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/__init__.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/_json.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/_range.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/extensions.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/psycopg1.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/tz.py -> build/lib.linux-x86_64-2.7/psycopg2

copying lib/extras.py -> build/lib.linux-x86_64-2.7/psycopg2

creating build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/testconfig.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copyng tests/test_bug_gc.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_dates.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_copy.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_cancel.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_bugX000.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_extras_dictcursor.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_psycopg2_dbapi20.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_types_basic.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_async.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_lobject.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_cursor.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_with.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/__init__.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_types_extras.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/testutils.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_notify.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_green.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_quote.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_connection.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_transaction.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/dbapi20.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/test_module.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

copying tests/dbapi20_tpc.py -> build/lib.linux-x86_64-2.7/psycopg2/tests

running build_ext

building 'psycopg2._psycopg' extension

creating build/temp.linux-x86_64-2.7

creating build/temp.linux-x86_64-2.7/psycopg

x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.2 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x09010D -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/usr/include/python2.7 -I. -I/usr/include/postgresql -I/usr/include/postgresql/9.1/server -c psycopg/psycopgmodule.c -o build/temp.linux-x86_64-2.7/psycopg/psycopgmodule.o -Wdeclaration-after-statement

In file included from psycopg/psycopgmodule.c:27:0:

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
 #include <Python.h>

                ^

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools;__file__='/tmp/pip_build_root/psycopg2/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-SgfQCA-record/install-record.txt --single-version-externally-managed failed with error code 1 in /tmp/pip_build_root/psycopg2
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.4.1', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 148, in main
    return command.main(args[1:], options)
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 169, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 54: ordinal not in range(128)

Я також отримую помилки при спробі встановити gunicorn. Я наслідував цей приклад тут, але нічого. Моє віртуальне середовище було створено за допомогою --no-site-packagesпрапора. Я використовую ubuntu 13.10 та грецьке середовище. Може, це все?


10
У вас встановлений python-devпакет? Якщо це дистрибутив на основі Debian (наприклад, Ubuntu), спробуйте, apt-get install python-devа потім повторіть спробу psycopg2встановлення. Це потрібно для компіляції розширень Python, написаних на C або C ++.
lanzz

дякую ... Це спрацювало !!!
Апостолос

2
Варто зазначити, що якщо ви користуєтесь дистрибутивом, не пов'язаним з Debian, вам потрібно буде використовувати yum install python-devel. Причина різниці мене уникає, окрім як сіяти плутанину і хаос.
Richard D

Гарне запитання, його слід проголосувати
Тимо

1
@RichardD Як встановити python-devel для Python3 за допомогою yum?
Джошуа Гомес

Відповіді:


166

python-devПакет необхідний для компіляції розширень Python , написаних на C або C ++, як psycopg2. Якщо у вас запущений дистрибутив на основі Debian (наприклад, Ubuntu), ви можете встановити python-dev, запустивши

sudo apt install python-dev

або

sudo apt install python3-dev

залежно від вашої версії python (наприклад, sudo apt install python3.8-dev).

Після цього перейдіть до встановлення psycopg2у своєму virtualenvсередовищі, як зазвичай.


13
Якщо ви використовуєте python 3, це може не спрацювати (або, можливо, точно не буде), вам потрібно буде це зробити apt-get install python3-dev.
Paul Whalen,

17
Мені довелося зробити apt-get install python3.5-devдля python 3.5
Або Дуана

7
те саме для python3.7-dev🤔
Нік

2
те саме для python3.8-dev!
marou

2
Думаю, тут може бути якась закономірність ... 🧐
lanzz

38

Адже Ubuntu 14.04із образу Docker python:3.4.3-slimця комбінація для мене працювала:

sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y python3.4-dev
sudo apt-get install -y libpq-dev

pip3 install psycopg2

Примітка build-essential . Це було вирішальним у моєму випадку.


4
Збірка необхідна зробила це для мене також. Використання Ubuntu 16.04 та Python 2.7.12
wilblack

Те ж саме! build-essentialбув відсутній шматок.
ankush981

Ubuntu 16.04, Python 3.5, те саме для мене - відсутня збірка.
Макс Малиш,


3

Перш за все встановіть python-dev

sudo apt-get install python-dev

І для адекватного використання спробуйте наступне:

Це пов’язано з тим, що кодування вашого терміналу не встановлено на UTF-8. Ось мій термінал:

$ echo $LANG
es_UY.UTF-8
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> 

Якщо я зняв налаштування, я отримав ту ж помилку, що і ви:

$ unset LANG
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
>>> 

1
Помилка Unicode просто пов'язана з візуалізацією. Фактична фатальна помилка - неможливість знайти Python.hфайл заголовка.
lanzz

1
Дякую, мені також довелося встановити сервер dev: sudo apt-get install postgresql-server-dev-9.1, або 9.3, якщо використовується postgres 9.3
radtek

3

Debian:

sudo apt-get install gcc

Чому це було проти? Це вирішило проблему для мене. gcc не встановлено за замовчуванням в ubuntu 19.
Saturnix

3

Я спробував все рішення, але тільки працює

pip install psycopg2-binary

після встановлення lib ви можете використовувати import psycopg2 у файлі python, а потім подальшу конфігурацію підключення db


2

Для останнього Python 3.7 мені довелося встановити python3.7-dev:

sudo apt-get install -y python3.7-dev




0

У моєму випадку я намагався встановити psysopg2 версії 2.7.3.2 у віртуальному середовищі за допомогою python3.8.

Сталася вищевказана помилка.

Як виявилося, python3.8 вимагає psycopg2 версії 2.8 або новішої .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.