Python 在ubuntu操作系统的virtualenv中安装psycopg2
我正在使用VirtualNV,并尝试设置postgresql。我的系统上安装了psycopg2,但我的虚拟环境似乎无法识别psycopg2。是否可以将系统范围的psycopg2文件复制到我的django项目目录中,或者这是一种不好的方法 这是django项目中my settings.py文件的相关部分Python 在ubuntu操作系统的virtualenv中安装psycopg2,python,django,postgresql,psycopg2,Python,Django,Postgresql,Psycopg2,我正在使用VirtualNV,并尝试设置postgresql。我的系统上安装了psycopg2,但我的虚拟环境似乎无法识别psycopg2。是否可以将系统范围的psycopg2文件复制到我的django项目目录中,或者这是一种不好的方法 这是django项目中my settings.py文件的相关部分 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2',
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
根据您的问题和您的一条评论,当您运行
sudo pip install psycopg2
时,它似乎正在使用系统安装,正如它在/usr/lib/python2.7/dist包中所指的psycopg2中所述,这与您尝试运行Django的环境不同
来自Django环境的权限错误可能是由于未使用sudo
(除其他外,在psycopg2安装期间需要进行一些C编译,因此通常需要sudo
,而其他许多软件包则不需要)
我建议您在运行sudo
命令时显式地参考virtualenv安装的pip二进制文件
i、 e.:
sudo/bin/pip安装psycopg2
这是一个旧线程,但有些人可能会遇到Python.h未找到
类型的错误,而pip在基于Ubuntu的系统上将psycopg2安装到virtualenv
通过在virtualenv内部运行python-V
来检查您的virtualenv python版本。
假设它是Python 3.8.0,请尝试通过以下方式将libpython3.8-dev安装到您的系统中(而不是virtualenv):
其他版本可能采用类似的方法
这为我解决了问题。您是否尝试过使用
pip安装psycopg2
在您的virtualenv中重新安装psycopg2?是的,我尝试过。我得到这个错误:异常:回溯(最后一次调用):文件“/uwsgi tutorial/local/lib/python2.7/site-packages/pip/basecommand.py”,第122行,主状态=self.run(选项,args)文件“/uwsgi tutorial/local/lib/python2.7/site-packages/pip/commands/install.py”,第278行,运行要求\u set.prepare\u文件(finder,force_root_egg_info=self.bundle,bundle=self.bundle)File“/uwsgi tutorial/local/lib/python2.7/site packages/pip/req.py”,第1153行,在prepare_files location=req_to_install.build_location(self.build_dir,而不是self.is_download)…当我安装psycopg2时,我得到以下要求:已经满足了(使用--upgrade进行升级):psycopg2 in/usr/lib/python2.7/dist-packages Cleaning up…当我再次尝试迁移时,仍然是相同的错误。很可能您的Postgres用户没有正确的权限。权限设置是否正确?您是否可以使用设置中的同一用户登录psql
?非常感谢,成功了!
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
sudo apt-get install libpython3.8-dev