python管理.pysyncdb失败,并显示“未正确配置:没有名为”psycopg2“的模块

2024-09-28 22:05:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在通过these steps安装我的第一个数字海洋服务器,它使用的是Ubuntu14x32和Django1.7,使用Python3.4。我对Ubuntu和digitialocean都是新手,尽管我多年前在Unix上开发过。在

我在运行syncdb时遇到了Postgres和Django的问题。在


(注意:我用-p /usr/bin/python3.4安装了我的virtualenv,这与指示的不同。我不知道这是否有区别。)


在步骤8中,它说要用

pip install psycopg2

this question中所述,必须更改为

^{pr2}$

但它失败了

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory

全输出:

(django_test_venv)jeffy@originaldjangster:~/django_files/django_test_venv/bin$ sudo /home/jeffy/django_files/django_test_venv/bin/pip install psycopg2
Downloading/unpacking psycopg2
  Downloading psycopg2-2.5.3.tar.gz (690kB): 690kB downloaded
  Running setup.py (path:/home/jeffy/django_files/django_test_venv/build/psycopg2/setup.py) egg_info for package psycopg2

Installing collected packages: psycopg2
  Running setup.py install for psycopg2
    Skipping implicit fixer: buffer
    Skipping implicit fixer: idioms
    Skipping implicit fixer: set_literal
    Skipping implicit fixer: ws_comma
    building 'psycopg2._psycopg' extension
    i686-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.3 (dt dec pq3 ext)" -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -DPG_VERSION_HEX=0x090304 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/usr/include/python3.4m -I/home/jeffy/django_files/django_test_venv/include/python3.4m -I. -I/usr/include/postgresql -I/usr/include/postgresql/9.3/server -c psycopg/psycopgmodule.c -o build/temp.linux-i686-3.4/psycopg/psycopgmodule.o -Wdeclaration-after-statement
    In file included from psycopg/psycopgmodule.c:27:0:
    ./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
     #include <Python.h>
                        ^
    compilation terminated.
    error: command 'i686-linux-gnu-gcc' failed with exit status 1
    Complete output from command /home/jeffy/django_files/django_test_venv/bin/python3.4 -c "import setuptools, tokenize;__file__='/home/jeffy/django_files/django_test_venv/build/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-jilc5e_m-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/jeffy/django_files/django_test_venv/include/site/python3.4:
    running install
running build
running build_py
creating build
creating build/lib.linux-i686-3.4
creating build/lib.linux-i686-3.4/psycopg2
copying lib/_range.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/extras.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/pool.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/extensions.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/errorcodes.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/psycopg1.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/__init__.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/_json.py -> build/lib.linux-i686-3.4/psycopg2
copying lib/tz.py -> build/lib.linux-i686-3.4/psycopg2
creating build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_dates.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_lobject.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_extras_dictcursor.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_transaction.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_green.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_psycopg2_dbapi20.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_bug_gc.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_bugX000.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_notify.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/dbapi20_tpc.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_types_basic.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/testconfig.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_with.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_quote.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_copy.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_module.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_types_extras.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/dbapi20.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_connection.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_async.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/__init__.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_cursor.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/testutils.py -> build/lib.linux-i686-3.4/psycopg2/tests
copying tests/test_cancel.py -> build/lib.linux-i686-3.4/psycopg2/tests
Skipping implicit fixer: buffer
Skipping implicit fixer: idioms
Skipping implicit fixer: set_literal
Skipping implicit fixer: ws_comma
running build_ext
building 'psycopg2._psycopg' extension
creating build/temp.linux-i686-3.4
creating build/temp.linux-i686-3.4/psycopg
i686-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.5.3 (dt dec pq3 ext)" -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -DPG_VERSION_HEX=0x090304 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/usr/include/python3.4m -I/home/jeffy/django_files/django_test_venv/include/python3.4m -I. -I/usr/include/postgresql -I/usr/include/postgresql/9.3/server -c psycopg/psycopgmodule.c -o build/temp.linux-i686-3.4/psycopg/psycopgmodule.o -Wdeclaration-after-statement
In file included from psycopg/psycopgmodule.c:27:0:
./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
 #include <Python.h>
                    ^
compilation terminated.
error: command 'i686-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Cleaning up...
Command /home/jeffy/django_files/django_test_venv/bin/python3.4 -c "import setuptools, tokenize;__file__='/home/jeffy/django_files/django_test_venv/build/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-jilc5e_m-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/jeffy/django_files/django_test_venv/include/site/python3.4 failed with error code 1 in /home/jeffy/django_files/django_test_venv/build/psycopg2
Storing debug log for failure in /home/jeffy/.pip/pip.log

我最终决定这样做,这是可行的:

sudo apt-get install python-psycopg2

然后它说要在settings.py中配置DjangoDATABASE变量,以

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

然后跑

python manange.py syncdb

syncdb失败,错误为

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

全输出:

(django_test_venv)jeffy@originaldjangster:~/django_files/django_test$ python manage.py syncdb
Traceback (most recent call last):
  File "/home/jeffy/django_files/django_test_venv/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 "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/apps/config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2231, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2203, 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 1448, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/contrib/auth/models.py", line 40, in <module>
    class Permission(models.Model):
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/models/base.py", line 125, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/models/base.py", line 300, in add_to_class
    value.contribute_to_class(cls, name)
  File "/home/jeffy/django_files/django_test_venv/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 "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/__init__.py", line 40, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/utils.py", line 242, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/utils.py", line 108, in load_backend
    return import_module('%s.base' % backend_name)
  File "/home/jeffy/django_files/django_test_venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2231, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2203, 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 1448, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/home/jeffy/django_files/django_test_venv/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_test_venv)jeffy@originaldjangster:~/django_files/django_test$

我确认此文件存在,它与DATABASE值匹配:

/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages/django/db/backends/postgresql_psycopg2

(重复一遍:我用-p /usr/bin/python3.4安装了我的virtualenv,这与指示的不同,尽管我不知道这是否有区别。)


Tags: djangoinpytestbuildvenvlinuxlib
3条回答

在您的系统中安装python3x dev和libpq dev,然后在virtualenv中安装psycopg2。在

apt-get install python3.4-dev libpq-dev

然后在你的虚拟世界里

^{pr2}$

正如this answer中建议的那样,我试图在IPython中同时导入psycopg2和{}。两者都返回了一个ImportError。在

我看到PYTHONPATH是空的,所以我将其设置为上面的目录

(django_test_venv)jeffy@originaldjangster:~/django_files/django_test$ echo $PYTHONPATH

(django_test_venv)jeffy@originaldjangster:~/django_files/django_test$ export PYTHONPATH=/home/jeffy/django_files/django_test_venv/lib/python3.4/site-packages

但是,这两个包在IPython中都导致了ImportError。正如this answer(相同的问题),我运行

^{pr2}$

(在这里尝试syncdb失败了。)

然后(adjusted as required,这是在问题帖子中提到的)

sudo /home/jeffy/django_files/django_test_venv/bin/pip install psycopg2

现在呢

python manage.py syncdb

有效。在

老话题,但可能对某些人有用,只是有相同的问题:使用python3.x的postgres没有psycopg2

有同样的问题,经过一番挖掘,这解决了我的问题:

https://pypi.org/project/psycopg2-binary/

pip install psycopg2-binary

相关问题 更多 >