【问题标题】:Using re2 in Python3在 Python3 中使用 re2
【发布时间】:2018-03-29 06:23:48
【问题描述】:

我需要在 python3 中使用 re2。安装工作正常,但是当我导入它时,我收到此错误:

>>> import re2 as re
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "re2.pyx", line 1, in init re2 (src/re2.cpp:13681)
NameError: basestring

有谁知道问题出在哪里?

【问题讨论】:

  • 我刚刚安装了build-essential libre2-dev form aptitude,然后通过pip re2!

标签: python python-3.x re2


【解决方案1】:

发布到 PyPI 的版本不兼容 Python 3; basestring 仅存在于 Python 2 中。这不是唯一的问题,修复一个以文本为中心的项目以适应 Python 3 all-text-is-Unicode 视图并非易事。

似乎特定项目未维护;其他人have already reported the problem,并且人们指向了另一个分支:https://github.com/andreasvc/pyre2

您可以直接从 GitHub 安装该项目:

pip install git+https://github.com/andreasvc/pyre2.git

请注意,您需要先安装 Cython 才能编译该项目;与其他 fork 不同,生成的 C++ 文件(来自 re2.pyx 文件)没有签入。只需运行 pip install Cython

你也可以看看替代品;也许regex module 也能满足您的要求。 regexre 的直接替代品,具有其他功能,例如大大改进了 Unicode 支持。

【讨论】:

  • regex 模块慢了 10 倍,所以没有人愿意使用它。 re2 应该是 Python 的一部分。仍然不适用于 Python 3.7.2 我希望它适用于 Python 3.8 及更高版本!
  • 有没有人试过 import cffi_re2 as re 在速度方面与 pyre2 相比如何?
  • 问题与 Python 3.7 导入错误:/dev/venv/lib/python3.7/site-packages/re2.cpython-37m-x86_64-linux-gnu.so:未定义符号:_ZNK3re23RE25MatchERKNS_11StringPieceEmmNS0_6AnchorEPS1_i跨度>
  • 重新编译 re2 没有运气 (venv) [ec2-user@ip-172-29-0-54 site-packages]$ ldd re2.cpython-37m-x86_64-linux-gnu.so linux- vdso.so.1 => (0x00007ffc92f5c000) libre2.so.0 => /usr/lib64/libre2.so.0 (0x00007f8de0668000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f8de02e2000) libm.so.6 => /lib64/libm.so.6 (0x00007f8ddffe0000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f8ddfdca000) libpthread.so.0 => /lib64/libpthread.so。 0 (0x00007f8ddfbad000) libc.so.6 => /lib64/libc.so.6 (0x00007f8ddf7e0000) /lib64/ld-linux-x86-64.so.2 (0x000055a3bf47f000)
  • 对不起,我在这里没有答案。听起来像是库版本不匹配。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2011-06-02
  • 2015-07-30
  • 1970-01-01
  • 2012-01-09
  • 2020-03-03
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多