问题描述
我可以通过命令行连接到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:
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:
我认为这与我试图在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!