2015-01-08 50 views
1

因此,如果我用python启动Python 2.7的shell并运行import psycopg2,我不会收到任何错误。但是,如果我尝试在Python 3.4的shell中运行import psycopg2,则得到:ImportError: No module named 'psycopg2'。另一方面,导入Django可以在两个shell上正常工作(使用pip3进行安装后)。其次,如果我运行python3 manage.py runserver,则出现错误(请参阅下文),而如果我仅使用python,则会出错。我认为这是因为我描述的第一个问题,但我不确定(对不起,如果这是一个愚蠢的问题,我对Django非常陌生 - 试图通过本教程)。使用PostgreSQL(psycopg2)和Django运行Python 3.4时出错

File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 23, in <module> 
import psycopg2 as Database 
ImportError: No module named 'psycopg2' 

During handling of the above exception, another exception occurred: 

Traceback(most recent call last): 
File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line 
utility.execute() 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute 
django.setup() 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/__init__.py", line 21, in setup 
apps.populate(settings.INSTALLED_APPS) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate 
app_config.import_models(all_models) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/apps/config.py", line 202, in import_models 
self.models_module = import_module(models_module_name) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/importlib/__init__.py", line 109, in import_module 
return _bootstrap._gcd_import(name[level: ], package, level) 
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1129, in _exec 
File "<frozen importlib._bootstrap>", line 1471, in exec_module 
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/contrib/auth/models.py", line 40, in <module> 
class Permission(models.Model): 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/models/base.py", line 122, in __new__ 
new_class.add_to_class('_meta', Options(meta, * * kwargs)) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/models/base.py", line 297, in add_to_class 
value.contribute_to_class(cls, name) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/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 "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/__init__.py", line 40, in __getattr__ 
return getattr(connections[DEFAULT_DB_ALIAS], item) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/utils.py", line 242, in __getitem__ 
backend = load_backend(db['ENGINE']) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/db/utils.py", line 108, in load_backend 
return import_module('%s.base' % backend_name) 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/importlib/__init__.py", line 109, in import_module 
return _bootstrap._gcd_import(name[level: ], package, level) 
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1129, in _exec 
File "<frozen importlib._bootstrap>", line 1471, in exec_module 
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/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' 

我该怎么办才能修复它?

此外,我对Django的整个Python 2 vs 3业务感到困惑(再次抱歉,如果这是一个非常基本的问题)。当你运行django-admin.py startproject theproject时,你如何指定你想用Django的哪个版本的Python?是否就像在Python 3中编写代码并使用python3而不是python运行一样简单?

+3

你已经运行'pip3安装psycopg2'?它有任何错误吗? – Alasdair

回答

2

确保您已经运行pip3 install psycopg2。

默认情况下,django-admin.py将使用Python 2运行。这并不重要,因为它所做的只是创建项目的文件夹布局。

一旦项目被创建,您可以编写Python 3代码,并使用python3 manage.py runserver到后来使用Python 3

运行你的网站,你可能需要调查虚拟环境。如果创建虚拟环境使用Python 3

virtualenv v -p python3 

然后你就可以在你的虚拟环境中运行

./manage.py runserver 

,它将使用Python 3

+0

我正在运行OS X(忘了指定),但是安装'psycopg2'和'pip3'完成了这个诀窍,错过了。如果我不使用virtualenv,现在会运行'django-admin.py'意味着我会使用Python 3吗?或者在任何情况下无关紧要,我可以使用2或3? – ujvl

+0

是的,运行'python3 manage.py runserver'就足够了。我已经更新了我的答案,希望它更有意义。 – Alasdair

0

如果你有多个版本的Python安装那么安装psycopg的最佳解决方案是从

下载档案

http://initd.org/psycopg/download/

,然后通过运行安装在(在我的情况,我想安装的Python 3.4)

python3.4 setup.py的建设

须藤python3.4 setup.py的安装

现在,检查是否通过输入以下内容安装:

python3。4

帮助()

模块

应该在模块的列表显示psycopg2。

0

我遇到了同样的问题,因为我在Mac上使用virtualenv从Python 2.7中使用Python 3进行切换。显然,在尝试从Python 3中尝试pip install psycopg2时,它仍然使用使用Python 2.7进行安装时创建的轮子。所以我不得不重建车轮使用

sudo -H pip3 install --upgrade --force-reinstall psycopg2 
相关问题