【问题标题】:Django/Python Beginner: Error when executing python manage.py syncdb - psycopg2 not foundDjango/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2
【发布时间】:2010-11-25 20:52:30
【问题描述】:

我使用 Macports 安装了 Pythong2.6、psycopg2 和 pgAdmin3。我的 settings.py 是:

DATABASE_ENGINE = 'postgresql_psycopg2'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'mysite'             # Or path to database file if using sqlite3.
DATABASE_USER = 'postgres'             # Not used with sqlite3.
DATABASE_PASSWORD = ''         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

我在运行 python manage.py syncdb 时遇到的错误是:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 221, in execute
    self.validate()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/validation.py", line 22, in get_validation_errors
    from django.db import models, connection
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 41, in <module>
    backend = load_backend(settings.DATABASE_ENGINE)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 17, in load_backend
    return import_module('.base', 'django.db.backends.%s' % backend_name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 22, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

请注意,我完全是这方面的初学者。我最初是一名 PHP 专家,正在为一个小型个人项目尝试 Python。我需要“打开” Postgres 吗?

另外,当我 sudo python manage.py runserver 8080 我收到此错误:

Validating models...
Unhandled exception in thread started by <function inner_run at 0x1242670>
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 48, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/validation.py", line 22, in get_validation_errors
    from django.db import models, connection
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 41, in <module>
    backend = load_backend(settings.DATABASE_ENGINE)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 17, in load_backend
    return import_module('.base', 'django.db.backends.%s' % backend_name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 22, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

请指导我。任何回复将不胜感激。

谢谢,

温伯特!

【问题讨论】:

    标签: python django django-syncdb


    【解决方案1】:

    使用 Django 3.2.9 和 Python 3.9.1,在 pip3 install psycopg2 之后,我必须这样做才能使初始的 python manage.py migrate 工作:

    在我的 Django 站点的 settings.py 文件中,我将这些行添加到文件顶部(from pathlib import Path 行之后):

    import sys
    sys.path.append('Users/MY_USER_NAME/Sites/SITE_NAME/env/lib/python3.9/site-packages')
    

    抱歉...~/Sites/... 路径设置不起作用(我试过),它需要是绝对的完整路径。

    我的数据库设置如下:

    DATABASES = {
       'default': {
          'ENGINE': 'django.db.backends.postgresql',
          'NAME': 'DATABASE_NAME',
          'USER': os.getenv('PG_USER'),
          'PASSWORD': os.getenv('PG_PASS'),
          'PORT': '5432',
          'USE_TZ': True,
       }
    }
    

    将这两行添加到 settings.py 文件的顶部后,迁移运行成功:)

    【讨论】:

      【解决方案2】:

      当您忘记激活虚拟环境时也会发生此错误。

      【讨论】:

        【解决方案3】:

        您可以在使用 django postgresql 作为后端的 heroku 部署中遇到此错误,只需将 psycopg2 添加到您的 requirements.txt 文件中

        【讨论】:

          【解决方案4】:

          我最近在 OSX 上更新自制软件后遇到了这个问题。 psycopg2 已经在我的 virtualenv 中列出。 我刚刚重新安装了 psycopg2,它又可以工作了:

          pip install --force-reinstall psycopg2

          【讨论】:

            【解决方案5】:

            这里也一样,但可能在当前项目中丢失了,所以我导航到主项目目录并安装它。

            pip install psycopg2
            

            成功了

            【讨论】:

              【解决方案6】:

              按照以下步骤操作:

              1. 在您的操作系统上安装 python 库:
                • python-dev
                • libpq-dev
              2. 执行命令安装psycopg2库:
                • easy_install psycopg2

              来源:http://initd.org/psycopg/install/

              【讨论】:

                【解决方案7】:

                这对我有帮助:

                我刚刚将 PostgreSQL bin 路径添加到 ENV,它能够精细化所需的 dll: C:\Program Files (x86)\PostgreSQL\9.4\bin

                https://groups.google.com/forum/#!topic/robotframework-users/qLq9KvHe1wE

                【讨论】:

                  【解决方案8】:

                  我在 Windows 上安装了 psycopg2,但安装的是 64 位版本。所以我的解决方法是从here 下载 32 位版本,然后在 PowerShell 中激活我的虚拟环境,我的解决方法是:

                  pip uninstall psycopg2
                  easy_install C:\WHEREVER_I_DOWNLOADED_IT\psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe
                  

                  (Windows Python 3.4 安装程序会自动安装easy_install 和pip,pip 是删除软件包的最简单方法,即使最初是使用easy_install 安装的。)

                  【讨论】:

                    【解决方案9】:

                    对我来说,确实安装了 psycopg2,但没有安装到运行 Django 的 virtualenv 中。这两个步骤修复了它:

                    sudo apt-get build-dep python-psycopg2
                    sudo /opt/myenv/bin/pip install psycopg2
                    

                    【讨论】:

                      【解决方案10】:

                      我意识到我没有安装 psycopg2

                      aptitude install python-psycopg2
                      

                      工作就像一个魅力

                      【讨论】:

                        【解决方案11】:

                        如果您安装了pip,只需运行以下命令安装缺少的扩展:

                        $ pip install psycopg2
                        

                        【讨论】:

                        【解决方案12】:

                        我遇到了同样的错误,但这是因为我使用 python26 ./manage.py runserver,而我的 virtualenv 只有 pythonpython2.6 可执行文件(因此正在使用系统 python26,它没有 @987654325 @已安装

                        【讨论】:

                          【解决方案13】:

                          是的,蒂姆的回答也适用于我。它没有前缀“django.db.backends”。还。但请记住创建您在 settings.py 中提到的数据库或架构:

                          DATABASE_NAME = 'your_db_name' 
                          

                          手动使用您的数据库客户端,因此当您运行“python manage.py syncdb”时,您不会遇到同样的问题。我被卡住了,因为我没有手动创建它。我遇到同样的问题可能是因为我使用了 buildout。

                          【讨论】:

                            【解决方案14】:

                            蒂姆的回答也对我有用。 默认情况下,settings.py 显示诸如“postgresql_psycopg2”、“mysql”等选项,没有包名。以 'django.db.backends.' 为前缀。为我工作(至少对于 postgresql_psycopg2)。

                            【讨论】:

                              【解决方案15】:

                              为了记录,我因为不同的原因得到了同样的错误:

                              我放了

                              'ENGINE': 'django.db.backends.postgresql'
                              

                              而不是

                              'ENGINE': 'django.db.backends.postgresql_psycopg2'
                              

                              settings.py

                              【讨论】:

                              【解决方案16】:

                              您的psycopg2 安装似乎有问题——Python 没有找到它。这是 Python 安装问题,不是 Django 问题。

                              您可以尝试使用 Python 解释器手动加载它,看看它是否有效:

                              $ python
                              >>> import psycopg2
                              

                              如果你得到一个ImportError 异常,你的安装是错误的。要获取 Python 查找模块的所有目录的列表,请使用 sys.path

                              $ python
                              >>> import sys
                              >>> print sys.path
                              

                              您还可以通过修改sys.path 变量将自定义目录添加到Python 的模块搜索路径。在相应的 import 语句之前的某处执行此操作:

                              import sys
                              sys.path.append("my-path")
                              
                              # ...
                              import psycopg2
                              

                              【讨论】:

                              • 我该怎么做才能让 python 在这个路径中查找 /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages 而不是 /Library/框架/Python.framework/Versions/2.6/lib/python2.6/site-packages
                              • 您可以修改 sys.path 以添加您自己的搜索目录。对于 django,您应该在 settings.py 中执行此操作。有关详细信息,请参阅我更新的帖子。
                              • 如果我创建了指向 Macports 创建的 python 路径的符号链接可以吗?基本上,我有这样的东西:Python.framework -> /opt/local/Library/Frameworks/Python.framework
                              • 我认为重定向整个 Python.framework 是个好主意,因为 Mac OS X 的某些部分可能会依赖它(另外,任何软件更新都可能会撤消此操作或更糟,感到困惑并安装东西否则)。您可能想尝试对 site-packages 目录中的实际包进行符号链接。
                              • 谢谢。我将创建一个指向 Macports 创建的实际包的符号链接。
                              【解决方案17】:

                              虽然你安装了它,但 Python 显然找不到模块 psycopg2。这通常是由于模块不在 Python 的路径中。看看你是否可以在/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages 中找到一个名为 psycopg2 的文件夹。如果它不存在,MacPorts 有没有告诉你它把 psycopg2 放在哪里?如果你能找到它,把它移到site-packages目录下就可以了。

                              【讨论】:

                              • psycopg2 在这里找到:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2-2.0.12-py2.6 .egg-info 你建议我做什么?
                              • 11 年后……我还在等待答案。
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-01-05
                              • 2011-08-04
                              • 2014-02-04
                              相关资源
                              最近更新 更多