High Sierra + Python + Postgresql错误:非法指令:4 [英] High Sierra + Python + Postgresql error: Illegal instruction: 4

查看:109
本文介绍了High Sierra + Python + Postgresql错误:非法指令:4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I can connect to Postgres via the command line no problem, however if I try to connect via Python using the psycopg2 module I get the error below. Interestingly I have just tried connecting with PSeqal.app and it crashes with the same error.


  • MacOS:10.13.3

  • Xcode 9.2

  • Python:3.6.4


    • 连接模块:psycopg2

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

    Here is my simple connection script which is trying to connect via Python to 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.')
    



    错误:



    脚本输出:

    Error:

    Script output:


    $ python3 testdb.py

    非法指令:4

    $ python3 testdb.py
    Illegal instruction: 4

    Apple错误(部分):

    Apple error (partial):

    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
    



    到目前为止,我已经尝试过:




    • 将Python从3.5.1升级到3.6.4


      • 重建所有依赖库,包括psycopg2,以确保它们与High Sierra兼容(我希望)

        所以我对下一步的尝试感到有些茫然。还有其他人遇到吗?任何指向哪里的指针?

        So I'm at a bit of a loss as to what to try next? Has anyone else run into this? Any pointers to where to look? Anything that helps me get this working would be greatly appreciated thanks!

        推荐答案

        因此,看起来psycopg2库是罪魁祸首,而这为我修复了此问题:

        So it looked like the psycopg2 library was the culprit and this fixed it for me:


        $ pip3卸载psycopg2

        ...

        成功卸载了psycopg2-binary-2.7.4


        $ pip3安装psycopg2-binary --no-binary:all:

        收集psycopg2-binary
        下载psycopg2-binary-2.7.4.tar.gz(426kB)
        100%| --- | 430kB 649kB / s
        跳过bdist_wheel以获取psycopg2-binary,因为已禁用二进制文件。
        安装收集的软件包:psycopg2-binary
        正在运行setup.py install for psycopg2-binary ...完成了

        成功安装了psycopg2-binary-2.7.4


        $ python3 test.py

        正在连接到PostgreSQL数据库...

        一切都很好。

        数据库连接已关闭。

        $pip3 uninstall psycopg2
        ...
        Successfully uninstalled psycopg2-binary-2.7.4

        $pip3 install psycopg2-binary --no-binary :all:
        Collecting psycopg2-binary Downloading psycopg2-binary-2.7.4.tar.gz (426kB) 100% |---| 430kB 649kB/s Skipping bdist_wheel for psycopg2-binary, due to binaries being disabled for it. Installing collected packages: psycopg2-binary Running setup.py install for psycopg2-binary ... done
        Successfully installed psycopg2-binary-2.7.4

        $python3 test.py
        Connecting to the PostgreSQL database...
        All good.
        Database connection closed.

        我认为这与我试图在2010年的MBP上构建psycopg2有关。并且它与硬件存在兼容性问题-可能是该机器具有的2.66 GHz Intel Core i7处理器。

        The reason I believe is something to do with the fact I was trying to build psycopg2 on a 2010 era MBP specifically and it has a compatibility issue with the hardware - probably the 2.66 GHz Intel Core i7 processor this machine has.

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

        Thank you @Laurenz Albe and @joop for quick replies, pointers and insights, you helped narrow me down to this answer which I hope will stay stable for the duration of this job ;) Cheers!

        这篇关于High Sierra + Python + Postgresql错误:非法指令:4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆