导入错误:没有名为psycopg2的模块。

153

在安装OpenERP 6的过程中,我想要使用以下命令生成一个配置文件:

cd /home/openerp/openerp-server/bin/
./openerp-server.py -s --stop-after-init -c /home/openerp/openerp-server.cfg

但它总是显示消息:ImportError: No module named psycopg2

检查了一下psycopg2包,它已经安装好了。软件包python-psycopg2-2.4.5-1.rhel5.x86_64已经安装到最新版本。出了什么问题?我的服务器是CentOS,我已经安装了Python 2.6.7。


44
你需要在其他一些问题上接受一些答案。 - John Lyon
2
该软件包适用于Python2.4安装。如果您已经手动安装了2.6版本,则还必须安装所有其他2.6版本的软件包。 - Keith
请执行以下命令以确认Python系统路径。$ python -c 'import sys; print sys.path' - Taizo Ito
请在Python控制台上尝试导入psycopg2,好吗? - Nilesh
如果你得到了答案,那么请选择答案。 - Nilesh
pip install psycopg2 - hassanzadeh.sd
24个回答

195

步骤1:安装依赖项

sudo apt-get install build-dep python-psycopg2

第二步:在您的虚拟环境中运行此命令

pip install psycopg2-binary 

参考:Fernando Munoz


1
我不得不运行 easy_install psycopg2,但是你的问题引导了我到那里! - JcKelley
3
我发现我还需要运行sudo apt-get install libpq-dev,因为我在尝试安装psycopg2的机器上没有安装Postgresql。 - Adam Parkin
14
适用于 Python3 用户:安装 libpq-dev postgresql - alekwisnia
7
在 Kubuntu 16.04 上,“build-dep” 选项无法使用,但是 “sudo apt-get install python-psycopg2” 可以使用。 - Mugoma J. Okomba
4
在Ubuntu 16.04中,出现了E:无法定位软件包build-dep的错误提示。 - Harun-Ur-Rashid
显示剩余4条评论

101

仅供参考 - "如果您是依赖于psycopg2的已发布软件包的维护者,则不应将psycopg2-binary用作模块依赖项" 参见:https://www.psycopg.org/docs/install.html#psycopg-vs-psycopg-binary - Chad

63

我遇到了同样的问题,并通过以下命令解决了它:

sudo apt-get install libpq-dev
pip install psycopg2

这个修复了我在运行 sudo apt-get install build-dep python-psycopg2 后收到的错误信息 You need to install postgresql-server-dev-X.Y ... (尽管我已经安装了postgresql)。 - webelo

24

尝试通过pip install psycopg2-binary --user安装

psycopg2-binary


1
这是唯一适用于我的python 3.7.3django 3.0.2的答案。 - Brian
2
--user 是用来做什么的? - Muhammad Inaam Munir
1
@MuhammadInaamMunir --user : 安装到Python用户安装目录,通常为~/.local/或Windows上的%APPDATA%\Python。 您可以使用 pip install --help 查看更多信息。 - ibnɘꟻ

16
Mac OS上的导入错误

如果psycopg2已被安装但无法在您的.py文件中导入,那么问题可能出在libpq、它的链接以及libpq所依赖的库openssl上。下面是整个步骤,您可以逐步检查以了解哪个是您的错误来源,然后从那里进行故障排除。
  • 检查是否安装了openssl并确保其正常工作。

  • 检查您的系统中是否安装了libpq,它可能未被安装或未被链接。如果未安装,则使用命令brew install libpq进行安装。这将安装libpq库。 根据文档说明

libpq是PostgreSQL的C应用程序员接口。libpq是一组库函数,允许客户端程序向PostgreSQL后端服务器传递查询,并接收这些查询的结果。

  • 使用brew link libpq链接libpq,如果不起作用,则使用命令:brew link libpq --force
  • 在您的.zshrc文件中加入以下内容:
    export PATH="/usr/local/opt/libpq/bin:$PATH"。这将创建所有必要的链接,以使用libpq库。
  • 现在重新启动终端或使用以下命令source ~/.zshrc

  • 现在使用命令pip install psycopg2。它会正常工作。 即使在conda环境下也可以使用此方法。

    N.B. 应该避免使用pip install psycopg2-binary,因为根据psycopg2库的开发人员所说
  • 在生产中不建议使用-binary软件包,因为过去它们在多线程环境中表现不可靠。这可能已经在最新版本中得到修复,但我从未成功地重现了该故障。


    这解决了我的问题!psycopg2显然已经安装好了,因为我能够成功地连接到我的数据库,但是当我尝试运行一个需要连接结果的streamlit应用程序时,我得到了“import not found”语句。这完全解决了它。谢谢! - Iris D
    1
    这个!这就是答案! :) - Anentropic

    14
    请在Python控制台上尝试运行命令import psycopg2。如果出现错误,请检查Python查找安装模块的sys.path是否包含python-psycopg2-2.4.5-1.rhel5.x86_64的父目录。如果不在sys.path中,则在运行openerp服务器之前运行export PYTHONPATH=<python-psycopg2-2.4.5-1.rhel5.x86_64的父目录>

    12

    请尝试以下方法:

    virtualenv -p /usr/bin/python3 test_env
    source test_env/bin/activate
    pip install psycopg2
    

    如果您坚持在系统Python上安装它,请运行Python并尝试导入。

    pip3 install psycopg2
    

    7

    最近我在生产服务器上遇到了这个问题。我使用以下命令安装了pyscopg2:

    sudo pip install psycopg2
    

    这个东西在我本地的运行非常完美,但在我的 ec2 服务器上却让我困扰了一段时间。

    sudo python -m pip install psycopg2
    

    这个命令对我有效。在这里发布,以防将来有人需要帮助。


    6
    sudo pip install psycopg2-binary
    

    4

    您需要安装psycopg2模块。

    在CentOS上: 确保已安装Python 2.7+。如果未安装,请按照以下说明操作:http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/

    # Python 2.7.6:
    $ wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
    $ tar xf Python-2.7.6.tar.xz
    $ cd Python-2.7.6
    $ ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
    $ make && make altinstall
    $ yum install postgresql-libs
    
    # First get the setup script for Setuptools:
    $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
    
    # Then install it for Python 2.7 and/or Python 3.3:
    $ python2.7 ez_setup.py
    
    $ easy_install-2.7 psycopg2
    

    尽管这是一个CentOS的问题,这里提供Ubuntu的指令:

    即使这是一个CentOS问题,这里是Ubuntu的说明:

    $ sudo apt-get install python3-pip python-distribute python-dev
    $ easy_install psycopg2
    

    Cite: http://initd.org/psycopg/install/


    哦,看起来出现了问题,“ez_setup.py已经过时,在使用时将会钉住setuptools到33.1.1”。 - Arthur

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接