非法指令:4运行Django时

时间:2018-02-09 16:25:13

标签: python django postgresql psycopg2

我现在正在安装Django v1.11.10。当我运行SOCKET sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sd < 0) { perror("opening datagram socket"); exit(1); } sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("225.1.1.1"); service.sin_port = htons(56565); struct in_addr localInterface; localInterface.s_addr = inet_addr("10.0.0.58"); if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0) { perror("setting local interface"); exit(1); } std::string data = "AA"; if (sendto(sd, data.c_str(), data.length(), 0, (const sockaddr*)&service, sizeof(service)) < 0) exit(0); 时,一切正常。但是当我尝试连接到Postgres数据库时,我安装了包python manage.py runserver,修改了pip install psycopg2 varibale,并在运行DATABASES命令后失败并出现runserver错误:

Illegal instruction

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

Performing system checks...

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

如果我设置DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydb', 'USER': 'sirjay', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': '', } } NAME不正确或者即使我关闭Postgres.app服务器,错误也是一样的。就像Django没有看到Postgres一样。但是使用USER我可以连接到Postgres服务器。

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

Blender's answerthis 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

这解决了我的问题。

答案 2 :(得分:0)

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