高Sierra + Python + Postgresql错误:非法指令:4

时间:2018-03-02 02:48:24

标签: python python-3.x macos postgresql psycopg2

我可以通过命令行连接到Postgres没问题,但是如果我尝试使用psycopg2模块通过Python连接,我会收到以下错误。有趣的是,我刚刚尝试连接PSeqal.app,它崩溃了同样的错误。

环境:

  • MacOS:10.13.3
  • Xcode 9.2
  • Python:3.6.4
    • 连接模块:psycopg2
  • Postgresql:10.3

脚本:

这是我的简单连接脚本,它试图通过Python连接到Postgresql:

def connect(self, params):
    """ Connect to the PostgreSQL database server """

    conn = None
    try:
        # connect to the PostgreSQL server
        logging.info('Connecting to the PostgreSQL database...')
        conn = psycopg2.connect(**params)

        # create a cursor
        self.cursor = conn.cursor()

        except (Exception, psycopg2.DatabaseError) as error:
            print(error)
        finally:
            if conn is not None:
                conn.close()
                logging.warning('Database connection closed.')

错误:

脚本输出:

  

$ python3 testdb.py   
非法指导:4

Apple错误(部分):

Process:               Python [79534]
Path:                  /usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/Resources/Python.app/Contents/MacOS/Python
Identifier:            Python
Version:               3.6.4 (3.6.4)
Code Type:             X86-64 (Native)
Parent Process:        bash [657]
Responsible:           Python [79534]
User ID:               501

Date/Time:             2018-03-02 15:30:27.642 +1300
OS Version:            Mac OS X 10.13.3 (17D102)
Report Version:        12
Anonymous UUID:        xx


Time Awake Since Boot: 21000 seconds

System Integrity Protection: disabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [0]

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0   libpq.5.10.dylib                0x00000001118e8d27 initPQExpBuffer + 32
1   libpq.5.10.dylib                0x00000001118dba93 PQconninfoParse + 43
2   _psycopg.cpython-36m-darwin.so  0x0000000111897cf1 psyco_parse_dsn + 113
3   org.python.python               0x000000010fd4681a _PyCFunction_FastCallDict + 463
4   org.python.python               0x000000010fdaad8e call_function + 489
5   org.python.python               0x000000010fda3c43 _PyEval_EvalFrameDefault + 4811
6   org.python.python               0x000000010fdab4f0 _PyEval_EvalCodeWithName + 1719
7   org.python.python               0x000000010fda293d PyEval_EvalCodeEx + 57
8   org.python.python               0x000000010fd2ec76 function_call + 339
9   org.python.python               0x000000010fd0e9f2 PyObject_Call + 101
10  org.python.python               0x000000010fda3eac _PyEval_EvalFrameDefault + 5428
11  org.python.python               0x000000010fdab4f0 _PyEval_EvalCodeWithName + 1719
12  org.python.python               0x000000010fda293d PyEval_EvalCodeEx + 57
13  org.python.python               0x000000010fd2ec76 function_call + 339
14  org.python.python               0x000000010fd0e9f2 PyObject_Call + 101
15  org.python.python               0x000000010fda3eac _PyEval_EvalFrameDefault + 5428
16  org.python.python               0x000000010fdabe93 _PyFunction_FastCall + 121
17  org.python.python               0x000000010fdaad65 call_function + 448
18  org.python.python               0x000000010fda3c43 _PyEval_EvalFrameDefault + 4811
19  org.python.python               0x000000010fdabe93 _PyFunction_FastCall + 121
20  org.python.python               0x000000010fd0eb71 _PyObject_FastCallDict + 196
21  org.python.python               0x000000010fd0ec94 _PyObject_Call_Prepend + 156
22  org.python.python               0x000000010fd0e9f2 PyObject_Call + 101
23  org.python.python               0x000000010fd598ae slot_tp_init + 57
24  org.python.python               0x000000010fd5683c type_call + 184
25  org.python.python               0x000000010fd0eb3c _PyObject_FastCallDict + 143
26  org.python.python               0x000000010fdaad5e call_function + 441
27  org.python.python               0x000000010fda3c43 _PyEval_EvalFrameDefault + 4811
28  org.python.python               0x000000010fdabe93 _PyFunction_FastCall + 121
29  org.python.python               0x000000010fd0eb71 _PyObject_FastCallDict + 196
30  org.python.python               0x000000010fd0ec94 _PyObject_Call_Prepend + 156
31  org.python.python               0x000000010fd0e9f2 PyObject_Call + 101
32  org.python.python               0x000000010fd598ae slot_tp_init + 57
33  org.python.python               0x000000010fd5683c type_call + 184
34  org.python.python               0x000000010fd0eb3c _PyObject_FastCallDict + 143
35  org.python.python               0x000000010fdaad5e call_function + 441
36  org.python.python               0x000000010fda3c43 _PyEval_EvalFrameDefault + 4811
37  org.python.python               0x000000010fdab4f0 _PyEval_EvalCodeWithName + 1719
38  org.python.python               0x000000010fda28fe PyEval_EvalCode + 42
39  org.python.python               0x000000010fdcb24e run_mod + 54
40  org.python.python               0x000000010fdca26f PyRun_FileExFlags + 160
41  org.python.python               0x000000010fdc994c PyRun_SimpleFileExFlags + 285
42  org.python.python               0x000000010fddd770 Py_Main + 3484
43  org.python.python               0x000000010fd01e1d 0x10fd00000 + 7709
44  libdyld.dylib                   0x00007fff6c260115 start + 1

Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x00007f86c3db9200  rbx: 0x00007ffedfefe3a0  rcx: 0x0000000000000100  rdx: 0x0000000000010000
rdi: 0x0000000000000b93  rsi: 0x00000000ffff0001  rbp: 0x00007ffedfefe390  rsp: 0x00007ffedfefe380
r8: 0x000000006c3db930   r9: 0x000000000000000f  r10: 0x00000000ffff0000  r11: 0x00007f86c3d00000
r12: 0x0000000110665738  r13: 0x0000000111c68510  r14: 0x0000000111cb80b0  r15: 0x00007ffedfefe3a0
rip: 0x00000001118e8d27  rfl: 0x0000000000010206  cr2: 0x00000001118ef90e

Logical CPU:     2
Error Code:      0x00000000
Trap Number:     6

到目前为止我尝试过:

  • 从3.5.1升级到3.6.4的Python
    • 重建所有依赖库,包括psycopg2,以确保它们与High Sierra兼容(我希望)
  • 从头开始重新安装Postgres
  • 升级的Xcode +工具

所以我对接下来的尝试感到有点失落?有没有其他人遇到这个?有什么指向哪里看?任何能帮助我完成这项工作的事情都将非常感谢!

2 个答案:

答案 0 :(得分:9)

所以看起来像psycopg2库是罪魁祸首,这为我解决了这个问题:

  

$ pip3卸载psycopg2
  ...
  成功卸载psycopg2-binary-2.7.4

  $ pip3安装psycopg2-binary --no-binary:all:
  收集psycopg2二进制文件     下载psycopg2-binary-2.7.4.tar.gz(426kB)       100%| --- | 430kB 649kB / s   由于二进制文件被禁用,因此跳过了psycopg2-binary的bdist_wheel。   安装收集的软件包:psycopg2-binary     运行setup.py安装psycopg2-binary ...完成
  成功安装psycopg2-binary-2.7.4

  $ python3 test.py
  连接到PostgreSQL数据库...
  一切都好。
  数据库连接关闭。

我认为这与我试图在2010年MBP专门构建psycopg2的事实有关,它与硬件有兼容性问题 - 可能是这台机器的2.66 GHz Intel Core i7处理器。

感谢@Laurenz Albe和@joop的快速回复,指示和见解,你帮助我缩小到这个答案,我希望在这份工作期间保持稳定;)干杯!

答案 1 :(得分:1)

根据堆栈跟踪,在这个无害的代码片段中,PostgreSQL客户端发生了这个错误:

WITH cte AS (
    SELECT t1.Description AS desc_dest, t2.Description AS desc_src
    FROM yourTable t1
    INNER JOIN yourTable t2
        ON t2.[Group] LIKE t1.[Group] + '[A-Z]%' AND LEN(t1.[Group]) <= 9
)

UPDATE cte
SET desc_dest = desc_src;

我发现thisthis问题涉及类似的问题。

非法指令应该意味着执行遇到了不存在的指令代码,这可能是编译器错误,也可能意味着代码是为具有不同指令集的处理器构建的。

问题很可能出现在构建PostgreSQL的过程中。您应该将此投诉提交给构建您正在使用的二进制文件的打包者。