installing psycopg2 on Windows xp using pip and vi

2019-08-05 10:32发布

问题:

I'm following Heroku's "Getting started with Django on Heroku" article and am getting a long series of errors on "pip install psycopg2". Django 1.5.1 and PostgreSQL 9.2.4 are already installed, and yes, the postgres \bin\, \include\ directories are on the PATH.

 C:\Python27\Scripts>
C:\Python27\Scripts>cd C:\Projects\hellodjango

C:\Projects\hellodjango>pip install psycopg2
Downloading/unpacking psycopg2
  Downloading psycopg2-2.5.1.tar.gz (684kB): 684kB downloaded
  Running setup.py egg_info for package psycopg2

Installing collected packages: psycopg2
  Running setup.py install for psycopg2
    building 'psycopg2._psycopg' extension
    c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /M
D /W3 /GS- /DNDEBUG -DPSYCOPG_DEFAULT_PYDATETIME=1 "-DPSYCOPG_VERSION=\"2.5.1 (d
t dec pq3 ext)\"" -DPG_VERSION_HEX=0x08020B -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW
_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -IC:\Python27\include -IC:\Python27\PC -I. -I/usr/
include -I/usr/include/postgresql/server /Tcpsycopg\psycopgmodule.c /Fobuild\tem
p.win32-2.7\Release\psycopg\psycopgmodule.obj
    psycopgmodule.c
    .\psycopg/psycopg.h(31) : fatal error C1083: Cannot open include file: 'libp
q-fe.h': No such file or directory
    error: command '"c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"
' failed with exit status 2
    Complete output from command C:\Python27\python.exe -c "import setuptools;__
file__='c:\\docume~1\\admini~1\\locals~1\\temp\\pip-build-Administrator\\psycopg
2\\setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__,
 'exec'))" install --record c:\docume~1\admini~1\locals~1\temp\pip-ewegoh-record
\install-record.txt --single-version-externally-managed:
    running install

running build

running build_py

creating build

creating build\lib.win32-2.7

creating build\lib.win32-2.7\psycopg2

copying lib\errorcodes.py -> build\lib.win32-2.7\psycopg2

copying lib\extensions.py -> build\lib.win32-2.7\psycopg2

copying lib\extras.py -> build\lib.win32-2.7\psycopg2

copying lib\pool.py -> build\lib.win32-2.7\psycopg2

copying lib\psycopg1.py -> build\lib.win32-2.7\psycopg2

copying lib\tz.py -> build\lib.win32-2.7\psycopg2

copying lib\_json.py -> build\lib.win32-2.7\psycopg2

copying lib\_range.py -> build\lib.win32-2.7\psycopg2

copying lib\__init__.py -> build\lib.win32-2.7\psycopg2

creating build\lib.win32-2.7\psycopg2\tests

copying tests\dbapi20.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\dbapi20_tpc.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\testconfig.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\testutils.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_async.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_bugX000.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_bug_gc.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_cancel.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_connection.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_copy.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_cursor.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_dates.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_extras_dictcursor.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_green.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_lobject.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_module.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_notify.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_psycopg2_dbapi20.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_quote.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_transaction.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_types_basic.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_types_extras.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\test_with.py -> build\lib.win32-2.7\psycopg2\tests

copying tests\__init__.py -> build\lib.win32-2.7\psycopg2\tests

running build_ext

building 'psycopg2._psycopg' extension

creating build\temp.win32-2.7

creating build\temp.win32-2.7\Release

creating build\temp.win32-2.7\Release\psycopg

c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W
3 /GS- /DNDEBUG -DPSYCOPG_DEFAULT_PYDATETIME=1 "-DPSYCOPG_VERSION=\"2.5.1 (dt de
c pq3 ext)\"" -DPG_VERSION_HEX=0x08020B -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOO
LEAN=1 -DHAVE_PQFREEMEM=1 -IC:\Python27\include -IC:\Python27\PC -I. -I/usr/incl
ude -I/usr/include/postgresql/server /Tcpsycopg\psycopgmodule.c /Fobuild\temp.wi
n32-2.7\Release\psycopg\psycopgmodule.obj

psycopgmodule.c

.\psycopg/psycopg.h(31) : fatal error C1083: Cannot open include file: 'libpq-fe
.h': No such file or directory

error: command '"c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' fa
iled with exit status 2

----------------------------------------
Command C:\Python27\python.exe -c "import setuptools;__file__='c:\\docume~1\\adm
ini~1\\locals~1\\temp\\pip-build-Administrator\\psycopg2\\setup.py';exec(compile
(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --reco
rd c:\docume~1\admini~1\locals~1\temp\pip-ewegoh-record\install-record.txt --sin
gle-version-externally-managed failed with error code 1 in c:\docume~1\admini~1\
locals~1\temp\pip-build-Administrator\psycopg2
Storing complete log in C:\Documents and Settings\Administrator\pip\pip.log

C:\Projects\hellodjango>

how can I solve this error?

回答1:

The psycopg2 build script calls pg_config.exe to discover the location of your PostgreSQL include and lib directories (since it needs libpq-fe.h and libpq.lib from there).

That's usually solved by adding your C:\PostgreSQL\bin directory to the PATH environment variable.

However your problem seems to be that you have PostgreSQL installed with Cygwin, thus the pg_config script tells to use /usr/include but the Visual Studio C compiler tries to find it in c:\usr\include while it is actually located under the Cygwin installation directory, like c:\cygwin\usr\include.

A quick and dirty fix is to temporarily copy your Cygwin include and lib directories into C:\usr and run pip again.

Or you can install the PostgreSQL windows binaries and point the PATH variable to them, so the pg_config.exe used won't be the Cygwin one.

If you also see this error during compilation:

error: command 'mt.exe' failed with exit status 31

You'll have to apply this fix: https://stackoverflow.com/a/20050195

Which is about adding:

ld_args.append('/MANIFEST')

To msvc9compiler.py after this line:

ld_args.append('/MANIFESTFILE:' + temp_manifest)

Or you can avoid all this, and use the psycopg2 pre-compiled binaries.