【问题标题】:Installing psycopg2 in a virtualenv in ubuntu os在 ubuntu os 的 virtualenv 中安装 psycopg2
【发布时间】:2014-09-17 21:46:20
【问题描述】:

我使用的是 virtualenv,我正在尝试设置 postgresql。我的系统上安装了 psycopg2,但我的虚拟环境似乎无法识别 psycopg2。是否可以将系统范围的 psycopg2 文件复制到我的 django 项目目录中,或者这是一种不好的方法?

这是我的 django 项目中 settings.py 文件的相关部分。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django_db' ,
    'USER': 'myusername' ,
    'PASSWORD': 'mypassword' ,
    'HOST': 'localhost' ,
    'PORT': '' ,

    }
}

当我运行 python manage.py migrate 时,我收到此错误:

    File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
        utility.execute()
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
        django.setup()
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
        app_config.import_models(all_models)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/apps/config.py", line 197, in import_models
        self.models_module = import_module(models_module_name)
      File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/contrib/auth/models.py", line 40, in <module>
        class Permission(models.Model):
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/models/base.py", line 125, in __new__
        new_class.add_to_class('_meta', Options(meta, **kwargs))
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/models/base.py", line 300, in add_to_class
        value.contribute_to_class(cls, name)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/models/options.py", line 166, in contribute_to_class
        self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/__init__.py", line 40, in __getattr__
        return getattr(connections[DEFAULT_DB_ALIAS], item)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/utils.py", line 242, in __getitem__
        backend = load_backend(db['ENGINE'])
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/utils.py", line 108, in load_backend
        return import_module('%s.base' % backend_name)
      File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/uwsgi-tutorial/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 27, in <module>
        raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
    django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

当我在我的虚拟环境中执行 pip install psycopg2 时,我收到以下错误:

Exception:
Traceback (most recent call last):
  File "/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/req.py", line 1153, in prepare_files
    location = req_to_install.build_location(self.build_dir, not self.is_download)
  File "/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/req.py", line 218, in build_location
    _make_build_dir(build_dir)
  File "/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/req.py", line 1527, in _make_build_dir
    os.makedirs(build_dir)
  File "/uwsgi-tutorial/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/uwsgi-tutorial/build'

Storing debug log for failure in /home/user/.pip/pip.log

【问题讨论】:

  • 您是否尝试过使用 pip install psycopg2 在您的 virtualenv 中重新安装 psycopg2?
  • 是的,我有。我收到此错误:异常:回溯(最近一次调用最后一次):文件“/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/basecommand.py”,第 122 行,主要状态 = self.运行(选项,args)文件“/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/commands/install.py”,第 278 行,运行中 require_set.prepare_files(finder,force_root_egg_info=self.bundle , bundle=self.bundle) 文件“/uwsgi-tutorial/local/lib/python2.7/site-packages/pip/req.py”,第 1153 行,在 prepare_files location = req_to_install.build_location(self.build_dir, not self .is_download)....
  • 当我执行 sudo pip install psycopg2 时,我得到以下信息:要求已经满足(使用 --upgrade 升级): /usr/lib/python2.7/dist-packages 中的 psycopg2 清理。 ..当我再次尝试迁移时,仍然是同样的错误。
  • 您的 Postgres 用户很可能没有正确的权限。它们设置正确吗?您可以使用与settings.py 相同的用户登录psql 吗?

标签: python django postgresql psycopg2


【解决方案1】:

这是一个旧线程,但有些人在基于 Ubuntu 的系统上通过 pip 将 psycopg2 安装到 virtualenv 时可能会遇到 Python.h not found 类型的错误。

通过在 virtualenv 中运行python -V检查您的 virtualenv python 版本。

假设它是 Python 3.8.0,尝试通过以下方式将 libpython3.8-dev 安装到您的系统(不是 virtualenv):

sudo apt-get install libpython3.8-dev

可能与其他版本类似。

这为我解决了。

【讨论】:

    【解决方案2】:

    根据您的问题和您的一个 cmets 的组合,当您运行 sudo pip install psycopg2 时,它似乎正在使用系统安装,因为它在 /usr/lib/python2.7 中引用了 psycopg2 /dist-packages 与您尝试运行 Django 的环境不同。

    您的权限错误,来自 Django 环境,似乎可能是由于没有使用 sudo(除其他外,需要进行一些 C 编译位置,在 psycopg2 安装期间,因此通常需要sudo,而许多其他软件包则不需要)。

    我建议您在运行 sudo 命令时明确参考 virtualenv 安装的 pip 二进制文件。

    即:sudo &lt;virtualenv_root&gt;/bin/pip install psycopg2

    【讨论】:

    • 非常感谢;做到了!
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2011-03-03
    • 1970-01-01
    • 2015-01-27
    • 2012-03-29
    • 2012-07-19
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多