无法在 Python 3.6 中导入 PyQ:平面命名空间错误

Can't import PyQ in Python 3.6 : flat namespace error

这是我收到的错误消息:

Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyq import q
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/pyq/__init__.py", line 21, in <module>  from . import _k
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/pyq/_k.cpython-36m-darwin.so, 2): Symbol not found: _b9  
Referenced from: 
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/pyq/_k.cpython-36m-darwin.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/pyq/_k.cpython-36m-darwin.so

我的python版本是3.6,pyq版本是4.0.1。

我通过 pip 安装了 pyq,Python 通过常规 OS 安装。

我想我找到了一个解决方案:当您 运行 您的 python 带有 pyq 二进制文件的脚本时,将能够 运行 [导入 pyq]。正如您 运行 一个常规 python 脚本 python xxx.py,您需要 运行 它作为 pyqxxx.py

PyQ 是嵌入在 kdb+ 中的 python 解释器,pyq 模块无法在独立 python 中导入。 pyq的三种使用方式:

  1. 在 q 命令提示符或 q 脚本中,以 p) 前缀开始该行,然后跟在 python 语句之后。例如,

    p)from pyq import q
    p)print(q.til(5))
    

将打印 0 1 2 3 4.

  1. 您可以将 python 代码放在扩展名为 .p 的文件中,并像使用 q 脚本一样使用它:从命令行执行

    $ q foo.p
    

或使用\l命令加载。

  1. 最后,pyq 可执行文件为 运行 标准 Python REPL 提供了一种方便的方式,可以交互或执行 python 程序。在内部,pyq 执行 q python.q,因此您的代码仍然 运行 在 kdb+ 实例中。请注意,当您 运行 pyq、Python REPL 接管时,您无法使用标准 kdb+ IPC 机制与您的 kdb+ 实例交互。如果您需要此类通信,请使用上述两个选项之一。