【问题标题】:Cannot Install psycopg2 in virtualenv in windows无法在 windows 的 virtualenv 中安装 psycopg2
【发布时间】:2019-10-28 16:14:41
【问题描述】:

我正在尝试在我的 VirtualEnv 中安装 Psycopg2,最初我遇到了找不到 pg_config.exe 的错误,我通过在 PATH 中添加完整路径来解决它。

但随后它给出了错误 Microsoft Visual C++ 14.0 is required。要删除它,我安装了 VC_redist.x64 VC_redist.x86。

我还在 VS 社区中安装了 C++ 开发模块。但它仍然给出这个错误。

编辑:还下载并安装了 VS 构建工具

我的环境:Windows 10 SL、Python 3.8.0、VirtualEnv 16.7.7、pip 19.3.1

    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQfreemem
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQencryptPasswordConn
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQencryptPassword
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQinitOpenSSL
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQconninfoParse
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQerrorMessage
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQlibVersion
    psycopgmodule.obj : error LNK2001: unresolved external symbol _PQconninfoFree
    green.obj : error LNK2001: unresolved external symbol _PQclear
    pqpath.obj : error LNK2001: unresolved external symbol _PQbinaryTuples
    pqpath.obj : error LNK2001: unresolved external symbol _PQsetnonblocking
    pqpath.obj : error LNK2001: unresolved external symbol _PQgetvalue
    pqpath.obj : error LNK2001: unresolved external symbol _PQresultStatus
    pqpath.obj : error LNK2001: unresolved external symbol _PQoidValue
    pqpath.obj : error LNK2001: unresolved external symbol _PQcmdStatus
    pqpath.obj : error LNK2001: unresolved external symbol _PQsocket
    pqpath.obj : error LNK2001: unresolved external symbol _PQftablecol
    pqpath.obj : error LNK2001: unresolved external symbol _PQputCopyData
    pqpath.obj : error LNK2001: unresolved external symbol _PQstatus
    pqpath.obj : error LNK2001: unresolved external symbol _PQisBusy
    pqpath.obj : error LNK2001: unresolved external symbol _PQconsumeInput
    pqpath.obj : error LNK2001: unresolved external symbol _PQresultErrorField
    pqpath.obj : error LNK2001: unresolved external symbol _PQfsize
    pqpath.obj : error LNK2001: unresolved external symbol _PQfname
    pqpath.obj : error LNK2001: unresolved external symbol _PQsendQuery
    pqpath.obj : error LNK2001: unresolved external symbol _PQgetCopyData
    pqpath.obj : error LNK2001: unresolved external symbol _PQftable
    pqpath.obj : error LNK2001: unresolved external symbol _PQflush
    pqpath.obj : error LNK2001: unresolved external symbol _PQftype
    pqpath.obj : error LNK2001: unresolved external symbol _PQnfields
    pqpath.obj : error LNK2001: unresolved external symbol _PQresultErrorMessage
    pqpath.obj : error LNK2001: unresolved external symbol _PQexec
    pqpath.obj : error LNK2001: unresolved external symbol _PQfmod
    pqpath.obj : error LNK2001: unresolved external symbol _PQcmdTuples
    pqpath.obj : error LNK2001: unresolved external symbol _PQntuples
    pqpath.obj : error LNK2001: unresolved external symbol _PQresStatus
    pqpath.obj : error LNK2001: unresolved external symbol _PQputCopyEnd
    pqpath.obj : error LNK2001: unresolved external symbol _PQgetResult
    utils.obj : error LNK2001: unresolved external symbol _PQescapeString
    utils.obj : error LNK2001: unresolved external symbol _PQescapeStringConn
    utils.obj : error LNK2001: unresolved external symbol _PQescapeIdentifier
    connection_int.obj : error LNK2001: unresolved external symbol _PQconnectPoll
    connection_int.obj : error LNK2001: unresolved external symbol _PQserverVersion
    connection_int.obj : error LNK2001: unresolved external symbol _PQnotifies
    connection_int.obj : error LNK2001: unresolved external symbol _PQsetNoticeProcessor
    connection_int.obj : error LNK2001: unresolved external symbol _PQgetCancel
    connection_int.obj : error LNK2001: unresolved external symbol _PQfinish
    connection_int.obj : error LNK2001: unresolved external symbol _PQprotocolVersion
    connection_int.obj : error LNK2001: unresolved external symbol _PQfreeCancel
    connection_int.obj : error LNK2001: unresolved external symbol _PQconnectdb
    connection_int.obj : error LNK2001: unresolved external symbol _PQconnectStart
    connection_int.obj : error LNK2001: unresolved external symbol _PQparameterStatus
    connection_type.obj : error LNK2001: unresolved external symbol _PQcancel
    connection_type.obj : error LNK2001: unresolved external symbol _PQtransactionStatus
    connection_type.obj : error LNK2001: unresolved external symbol _PQbackendPID
    connection_type.obj : error LNK2001: unresolved external symbol _PQconninfo
    cursor_type.obj : error LNK2001: unresolved external symbol _PQgetisnull
    cursor_type.obj : error LNK2001: unresolved external symbol _PQgetlength
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQsslInUse
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQconnectionNeedsPassword
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQpass
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQdb
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQsslAttribute
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQport
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQoptions
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQconnectionUsedPassword
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQsslAttributeNames
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQuser
    conninfo_type.obj : error LNK2001: unresolved external symbol _PQhost
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_truncate
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_write
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_export
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_import
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_creat
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_read
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_tell
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_create
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_lseek
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_unlink
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_open
    lobject_int.obj : error LNK2001: unresolved external symbol _lo_close
    adapter_binary.obj : error LNK2001: unresolved external symbol _PQescapeByteaConn
    adapter_binary.obj : error LNK2001: unresolved external symbol _PQescapeBytea
    build\lib.win32-3.8\psycopg2\_psycopg.cp38-win32.pyd : fatal error LNK1120: 83 unresolved externals
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.23.28105\\bin\\HostX86\\x86\\link.exe' failed with exit status 1120

背景:我正在使用 pgSQL 的 Django 中进行开发,由于某些原因,我进行了 Windows 的全新安装,并且在 Windows 安装后,我运行了我的 virtualenv,但它无法检测到任何包(可能是因为我的 env 是在python 3.7,现在我有了 python 3.8(虽然我确实尝试用 python 3.7 安装它))。所以我不得不重建 virtualenv,目前卡在 psycopg2 上

【问题讨论】:

  • 我不怎么用windows,但是那些unresolved external symbols表示Postgres丢失或找不到。具体来说,您的环境中可能缺少libpq.dll
  • 我的PATH 中也包含了C:\Program Files\PostgreSQL\12\lib,我可以确认libpq.dll 在那里。
  • psycopg2 还不支持 Python 3.8。这是 Github 上的 reported issue。显然,劫持是appveyor,一个部署工具。

标签: python c++ django postgresql psycopg2


【解决方案1】:

安装python 64位版本(官网x86-64)。我遇到了同样的问题,做了你所做的 evrt 并且它没有工作,在安装了正确版本的 python 后,我解决了这个问题。

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 2011-03-03
    • 2019-11-06
    • 1970-01-01
    • 2014-07-20
    • 2015-07-20
    • 1970-01-01
    • 2013-07-04
    • 2020-03-27
    相关资源
    最近更新 更多