非法指令:4运行Django时

sir*_*jay 1 python django postgresql psycopg2

我现在干净安装了Django v1.11.10.当我运行python manage.py runserver一切正常.但是当我尝试连接到Postgres数据库时,我安装了包pip install psycopg2,修改了DATABASESvaribale,在运行runserver命令后它失败并Illegal instruction出现错误:

Performing system checks...

System check identified no issues (0 silenced).
Illegal instruction: 4
Run Code Online (Sandbox Code Playgroud)

它是什么?如何获取日志错误?我使用Mac OS 10.11.6,PostgresApp(尝试在v9和v10服务器上检查错误源).Python 3.6.4(通过virtualenv).

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'sirjay',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '',
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我设置NAMEUSER不正确,或者即使我关闭Postgres.app服务器,错误也是一样的.这就像Django没有看到Postgres.但随着phpPgAdmin我可以连接到Postgres服务器.

Ble*_*der 11

psycopg2部分用C语言编写,需要编译.当你pip install打包时,通常会有一个预编译的二进制轮可供下载.

出于某种原因,预编译psycopg2模块包含CPU无法识别的指令(可能是因为处理器太旧).您可以通过自己编译模块来解决此问题,这将确保代码在您的CPU上运行:

$ pip install --no-binary psycopg2 psycopg2
Run Code Online (Sandbox Code Playgroud)

--no-binary psycopg2是一个单独的选项,因此您必须指定包名称两次.您也可以将此包含在您的requirements.txt中:

psycopg2==a.b.c    --no-binary psycopg2
Run Code Online (Sandbox Code Playgroud)