【问题标题】:Python, Cygwin - ImportError: No module named _psycopgPython,Cygwin - ImportError:没有名为 _psycopg 的模块
【发布时间】:2015-02-15 10:34:29
【问题描述】:

我使用 https://github.com/nwcell/psycopg2-windowshttps://bitbucket.org/topper/psycopg2-win64-py27/overview 上的文章来安装 psycopg2 并在 Python2.7 和 Cygwin 上工作。

安装运行良好,我在 /usr/lib/python2.7/site-packages/psycopg2-2.5.3-py2.7.egg/ 目录中看到了包。

但是导入不起作用..对此错误有任何想法吗?

Python 2.7.8 (default, Jul 25 2014, 14:04:36)
[GCC 4.8.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/psycopg2-2.5.3-py2.7.egg/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: No module named _psycopg

谢谢, 马尼什

【问题讨论】:

  • 我在 C:\cygwin64\lib\python2.7\site-packages 中看到 -rw-r--r-- 1 sacace Domain Users 1830400 Feb 15 15:57 _psycopg.pyd 文件\psycopg2-2.5.3-py2.7.egg\psycopg2 目录。不知道为什么找不到它
  • 同样的问题,还没有解决方案。我们是否应该在 64 位系统上切换到 Cygwin 32 位?

标签: python postgresql cygwin 64-bit psycopg2


【解决方案1】:

我收到了这组确切的消息——但不是在我本地的 Cygwin/Babun 开发环境中——当我推送到 RHEL 7 服务器进行测试时,我得到了这些消息。花了两天时间才把它刷出来,我解决它的方法可能不适用于你。但我学到了一些可能有用的东西。

在这些错误报告(Python 和 psycopg 相互指责)中,对导致此错误的另一个原因进行了详尽的论证——通常不值得一读——请阅读下文:

它的要点?寻找一些更新 - 看起来他们俩可能都做了一些影响这一点的小改动。

无论如何...这就是我在 Cygwin 中安装 psycopg2 的方式(假设 Babun 的 pact 安装程序可用):

  • pact install libpq-devel
  • pip install psycopg2

是的,就是这样! (某些环境可能还需要 C 编译器和 python*-devel。)

安装 libpq-devel 的替代方法是安装 Windows Postgres 并将其 pg_config 文件的位置添加到您的 PATH 以便 pip 可以编译 psycopg2 -- 但是从 Cygwin shell 安装 libpq-devel 更干净,它会将其 pg_config 放在 pip 已经可以找到它的位置。

我从一个虚拟环境中安装了 pyscopg2,但这应该没关系。然而,重要的可能是以下之一:

  • Python 版本:您使用的是 2.7.8(几乎是当时最新的),我使用的是 3.4.3。尝试更高版本的 2.7。
  • psycopg2 版本:你用的是 2.5.3,我用的是 2.6.1。
  • Python 安装冲突。检查 Python 中的 sys.path 值以确保它看起来与您预期的一样。根据您发布的内容,这似乎不是您的问题,但我提到它是因为这最终是我在 RHEL 7 上的问题以及 Apache 如何加载虚拟环境。 ----(这里只是另一个说明:我最终通过为 Python 3.4.3 编译另一个 mod_wsgi 来解决 RHEL 问题,按照他们的说明,以匹配我的虚拟环境。以前的 mod_wsgi 在 Python 2.7.5 下运行,该版本无法从 C 库导入 _psycopg。此外,我根本不希望 2.7 运行。)

【讨论】:

    【解决方案2】:

    Env = python 2.7.10(cygwin 发行版)、Windows 7、Cygwin 64

    1) pip install psycopg2 失败,因为我没有 pip 调试

    2) 从这里安装 pip:pip.pypa.io/en/stable/installing/

    3) pip install psycopg2 由于“没有 pg_config...”而失败

    4) win (www.stickpeople.com/projects/python/win-psycopg/) 的 psycopg2 安装程序失败,因为我使用的是 cygwin 的 python 安装,而不是机器注册表中的 python,并且此安装程序不允许用户安装在 Windows 注册的 python 之外的任何其他地方 (安装程序成功,但文件不在我需要的地方。) (“复制”文件不起作用。)

    5) 这个 (https://github.com/nwcell/psycopg2-windows) pip install "worked" (没有错误) 但是当我尝试导入时,我收到了消息: "ImportError: 没有名为 psycopg2 的模块"

    6) pip 卸载 psycopg2

    7) 尝试 pip install libpq-dev 和 python-dev “找不到满足 libpq-dev 要求的版本(来自版本:) 找不到与 libpq-dev 匹配的分发版”

    8) 从这里安装 Postgres 和 pg_config http://www.enterprisedb.com/products-services-training/pgdownload#windows

    9) 将 pg_config 添加到路径

    10) pip install psycopg2 现在可以工作了

    11) 在 .py 文件中导入 psycopg2 导致核心转储

    堆栈跟踪: 框架函数参数 006001A5A60 0018007261A (000FFFFE3F4, 0000000E514, 00000000000, 000FFFFDE50) 006001A5B00 00180073DD0 (00077801FD6, 00000000000, 00000000140, 00000000000) 006001A5D50 0018012EF8F (00600010540, 00000000000, 003DB05FDB0, 6FFFFF28050) 006001A6040 0018012BC70 (0000000000D, 00000000000, 00000000000, 0018013D7DA) 00000000000 0018012C139 (006001A6030, 3630303030303030, 3036303030303030, 00000 00000B) 00000000000 0018012C30C (00000000000, 10000000A8E73, 6F007000650072, 61006C0074 0072) 00000000000 00180127BFB (00000000000, 10000000A8E73, 6F007000650072, 61006C0074 0072) 00000000000 00180071169 (01000000010, 00000000000, 00000000000, 000FFFFCE00) 000FFFFAA00 00180073D11 (B64000B00630079, 00000000088, 1D17578E1C375D4, 1D17578 E16661AE) 52004F00520052 64006F00630072 (00000000088, 1D17578E1C375D4, 1D17578E16661AE, 1 D175A09055FB4F) 52004F00520052 70002E00730065(1D17578E1C375D4、1D17578E16661AE、1D175A09055FB4 F, 1D175A09055FB4F) 52004F00520052 B64000B00630079 (1D17578E16661AE, 1D175A09055FB4F, 1D175A09055FB 4F, 0000000180B) 52004F00520052 00000000088 (1D175A09055FB4F, 1D175A09055FB4F, 0000000180B, 0000 0002000) 52004F00520052 1D17578E1C375D4 (1D175A09055FB4F, 0000000180B, 00000002000, 01A0 0000020) 52004F00520052 1D17578E16661AE (0000000180B, 00000002000, 01A00000020, 45001600 000000) 52004F00520052 1D175A09055FB4F (00000002000, 01A00000020, 45001600000000, 4E004 500540058) 堆栈跟踪结束(可能存在更多堆栈帧)

    (以上耗时约 2 天。)

    12) pip install pg8000 工作

    13) 将 pg8000 导入到 .py 文件并连接到 DB (第 12 步和第 13 步耗时约 20 分钟。)

    【讨论】:

      【解决方案3】:

      必须安装libpq,有时它不会作为libpq-devel 的一部分安装。截至目前,我成功安装了libpq5

      【讨论】:

        【解决方案4】:

        你必须使用Cygwin package installer来安装这两个包:

        • libecpg6,用于 psycopg2 运行时库支持,没有它你会得到 'ImportError: No module named _psycopg' when you run your script.
        • libecpg-devel,如果没有它编译psycopg2,你会得到很多 例如使用 pip 工具安装 psycopg2 时出现pthread_*** 错误。

        随着时间的推移,这些包名可能会改变,但你应该知道是什么 你的不足。

        【讨论】: