【问题标题】:Django runserver error (psycopg2)Django 运行服务器错误 (psycopg2)
【发布时间】:2014-02-02 22:02:24
【问题描述】:

我正在尝试这样做:

python3.3 manage.py runserver

在我的 Django 项目文件夹中。我收到此错误消息:

  File "/usr/local/lib/python3.3/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 25, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module  named 'psycopg2'

我在 settings.py 中的设置如下:

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.postgresql_psycopg2',
        'NAME': 'test_databas',
        'USER': 'postgre',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

我已经用 Python3.3 下载了 psycopg2。文件 /usr/local/lib/python3.3/site-packages/django/db/backends/postgresql_psycopg2/base.py 也存在。但是,Python 认为我没有名为 psycopg2 的模块。我试过这个:

$ python3.3
Python 3.3.3 (default, Feb  2 2014, 14:32:49) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'psycopg2'
>>> 

我还按照here 的建议更改了我的 sys.path。

我是新手,非常感谢您的帮助。

【问题讨论】:

  • 您的postgresql_psycopg2 版本是什么? Python 3.3 支持来自 Psycopg 2.5 和更高版本。你可以从initd.org/psycopg
  • 我尝试使用 python 和命令行检查我的版本(我使用 apt-get 安装它),但它只是告诉我我没有名为 psycopg2 的模块。
  • 您可能使用包管理器安装了错误的psycopg2 模块。请参阅我的回答。

标签: python django psycopg2


【解决方案1】:

我检查了psycopg2的本地安装

apt-cache show python-psycopg2

包:python-psycopg2

优先级:可选

部分:python

安装尺寸:635

...

来源:psycopg2

版本:2.4.5-1

取决于:python2.7、python (>= 2.7.1-0ubuntu2)、python (= 2.14)、libpq5 (>= 8.3~)

所以,python-psycopg2 为您安装了与python 3.x 不兼容的版本,但还有一个名为python3-psycopg2 的包,当我检查它时,它看起来也是 版本:2.4.5- 1 但描述性文字表明它与python 3.2 兼容

apt-cache show python3-psycopg2

包:python3-psycopg2

优先级:可选

版本:2.4.5-1

提供:python3.2-psycopg2

取决于:python3 (>= 3.2)、python3 (= 2.14)、libpq5 (>= 8.3~)

另外,包装尺寸也不同。 python3-psycopg2 可能是您需要的,它只是文档上的版本错误。

【讨论】:

  • 谢谢,现在我明白为什么我的 apt-get 命令不起作用了。显然 easy_install 会自动安装 python3 版本。谢谢!
【解决方案2】:

我遇到了这个问题,按照下面的过程解决了:

安装 pip3:

sudo apt-get install python3-pip

安装虚拟环境:

sudo pip3 install virtualenv

安装 posgresql 依赖:

sudo apt-get install python3-dev libpq-dev

配置虚拟环境:

mkdir django
cd django
virtualenv -p /usr/bin/python3.4 venv
source venv/bin/activate

安装 django:

pip3 install django

安装 psycopg2:

pip3 install psycopg2

【讨论】:

    【解决方案3】:

    如果您尝试使用默认用户,则您拼错了“postgres”:

    'USER': 'postgre',
    

    http://pythonhosted.org//psycopg2/install.html#installation 的文档建议使用 repos 安装软件包。但是,请检查您的 $PATH 变量。

    【讨论】:

    • 是的,我使用的是默认用户。谢谢!我已经改变了我的路径变量,不幸的是这并没有帮助。但是,我以某种方式设法自己使用 easy_install 解决了这个问题。
    • 这不可能是原因,因为错误说它无法导入相关模块。在您的情况下,Django 将抛出基于 Database Connection 的错误,而不是 ImportError
    • 这就是我在安装过程之后发表评论的原因。我没有说用户名修复是原因。抱歉,缺少细节。
    【解决方案4】:

    我自己解决了这个问题,但我不确定为什么这是一个好的解决方案。对我来说,这个命令没有正确安装 psycopg2:

    sudo apt-get install python-psycopg2
    

    通过在 python3.3 中导入模块,我也无法从命令行获取版本。所以这就是我所做的:

    sudo apt-get install libpq-dev
    
    sudo easy_install psycopg2
    

    现在看起来像这样:

    $ python3.3 manage.py runserver
    Validating models...
    
    0 errors found
    February 03, 2014 - 08:54:13
    Django version 1.6.1, using settings 'testprojekt.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.
    

    如果有人知道这解决了问题的原因,请随时发表评论。 :)

    【讨论】:

    • 可能easy_install安装了最新版本,而linux包索引包含2个包,一个为3.x,另一个为2.x
    【解决方案5】:

    我建议您让您的生活更轻松,并使用 virtualenv 和 pip 来安装库。为什么?因为在 virtualenv 中,您可以避免误认为 Python 可执行文件和库是为选定的 Python 版本安装的。

    我个人为每个项目保留一个 virtualenv,所以我只有我真正需要的库。我也知道,随着系统的更新,我不会得到一些不向后兼容的新版本的库。但是,如果pip upgrade &lt;library&gt; 需要,我仍然可以更新库。我可以打包 virtualenv 并为我的项目制作需求列表。我不需要 sudo 来安装包,所以它也更安全。

    安装 virtualenv

    sudo apt-get install python-virtualenv
    

    准备 virtualenv 环境

    sebastian@pc:~/test$ virtualenv -p python3.4 p34_virt_env
    Running virtualenv with interpreter /usr/bin/python3.4
    (...)
    

    检查系统默认python解释器

    sebastian@pc:~/test$ python --version
    Python 2.7.6
    

    激活 virtualenv 环境(参见 (p34_virt_env) virtualenv 指示器?)

    sebastian@pc:~/test$ source p34_virt_env/bin/activate
    

    再次检查 python 版本 - 它改变了

    (p34_virt_env)sebastian@pc:~/test$ python --version
    Python 3.4.0
    

    没有库的环境干净

    (p34_virt_env)sebastian@pc:~/test$ pip list
    pip (1.5.6)
    setuptools (3.6)
    

    现在您可以 pip 安装您需要的东西,不用担心是否必须安装 python3-xxxpython-xxx 库。

    (p34_virt_env)sebastian@pc:~/test$ pip install psycopg2
    

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 2016-09-18
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多