非法指令:运行 Django 时为 4

Posted

技术标签:

【中文标题】非法指令:运行 Django 时为 4【英文标题】:Illegal instruction: 4 when running Django 【发布时间】:2018-07-20 11:24:47 【问题描述】:

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

Performing system checks...

System check identified no issues (0 silenced).
Illegal instruction: 4

这是什么?如何获取日志错误?我使用 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': '',
    

如果我将 NAMEUSER 设置不正确,或者即使我关闭了 Postgres.app 服务器,错误也会相同。就像 Django 没有看到 Postgres。但是使用phpPgAdmin 我可以连接到 Postgres 服务器。

【问题讨论】:

你看了吗? 已添加DATABASES 我不明白,你能解释清楚吗?注意:如果我关闭 Postgres.app 服务器,错误是一样的。 单独使用psycopg2 module 是否仍会导致错误(应该)?如果是这样,请尝试卸载 psycopg2 并从源代码重新安装它,而不是使用二进制轮:pip install --no-binary psycopg2 psycopg2 @sirjay:psycopg2 有一些部分是用 C 编写的,看起来你的 Mac 的 CPU 对于 PyPI 上的预编译二进制文件来说太旧了(非法指令)。自己编译将保证它可以在您的 CPU 上运行。 【参考方案1】:

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

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

$ pip install --no-binary psycopg2 psycopg2

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

psycopg2==a.b.c    --no-binary psycopg2

【讨论】:

【参考方案2】:

Blender's answer 和 this other question 指出了问题所在,但是在运行建议的命令时,我收到以下错误:

 Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

由于我对设置、配置等一无所知,所以花了一段时间才弄清楚如何去做。这是以防其他人面临同样的问题:

pip uninstall psycopg2

then

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin/

然后

pip install --no-binary :all: psycopg2

这解决了我的问题。

【讨论】:

【参考方案3】:

pip install --no-binary psycopg2 psycopg2重新安装解决了问题

【讨论】:

以上是关于非法指令:运行 Django 时为 4的主要内容,如果未能解决你的问题,请参考以下文章

Conda Init 非法指令(核心转储)

运行基本 Avx512 代码时获得非法指令

Xcode 7 命令因信号而失败:非法指令 4

运行DPDK程序报错:非法指令 核心已转储

FAISS 搜索失败并出现模糊错误:“非法指令”或内核崩溃

MIPS交叉编译错误:非法指令