我在哪里可以获得 Buildroot 上的 Python 2to3 库

Where can I get the Python 2to3 library on Buildroot

在 Buildroot Linux 系统上的 Python 2.7 中导入 gmusicapi 时出现以下错误:

>>> import gmusicapi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "gmusicapi/__init__.py", line 4, in <module>
    from gmusicapi.clients import Webclient, Musicmanager, Mobileclient
  File "gmusicapi/clients/__init__.py", line 4, in <module>
    from gmusicapi.clients.webclient import Webclient
  File "gmusicapi/clients/webclient.py", line 5, in <module>
    from past.builtins import basestring
  File "past/__init__.py", line 88, in <module>
    from past.translation import install_hooks as autotranslate
  File "past/translation/__init__.py", line 41, in <module>
    from lib2to3.pgen2.parse import ParseError
ImportError: No module named lib2to3.pgen2.parse

Python 找不到 lib2to3。我也不行 ;-)。有什么地方可以下载这个库吗?我正在使用 Buildroot,所以我不能简单地进行 pip 安装。

这是不是的副本: How to use/install python 2to3?

解决方法:修补过去的库(问题来源):

--- past/translation/__init__.py.orig   2017-09-24 08:23:47.646644743 +0200
+++ past/translation/__init__.py    2018-01-01 10:31:36.584576652 +0100
@@ -38,8 +38,32 @@
 import os
 import sys
 import copy
-from lib2to3.pgen2.parse import ParseError
-from lib2to3.refactor import RefactoringTool
+
+try:
+    from lib2to3.pgen2.parse import ParseError
+
+except ImportError:
+
+    class ParseError(SyntaxError):
+        pass
+
+try:
+    from lib2to3.refactor import RefactoringTool
+
+except ImportError:
+
+    class RefactoringTool:
+
+        def __init__(self, *args, **kwargs):
+            self._args = [repr(a) for a in args]
+            self._args += ["{}={!r}".format(k, v) for k, v in kwargs.items()]
+
+        def __repr__(self):
+            return "{}({})".format(self.__class__.__name__, ", ".join(self._args))
+
+        def refactor_string(self, *args, **kwargs):
+            raise NotImplementedError("dummy RefactoringTool")
+

 from libfuturize import fixes

在此处找到:https://github.com/PythonCharmers/python-future/issues/209

如果有人能给我指出可下载的 lib2to3,我会接受这个答案,目前这个解决方法可以解决问题。

lib2to3 是一个 标准库 ,通常包含在 Python 中。但是,buildroot 构建系统 explicitly removes it.

我不确定 Buildroot 是否真的允许您禁用他们的补丁; python.mk file 似乎对标志进行了硬编码:

PYTHON_CONF_OPTS += \
    --without-cxx-main \
    --without-doc-strings \
    --with-system-ffi \
    --disable-pydoc \
    --disable-test-modules \
    --disable-lib2to3 \
    --disable-gdbm \
    --disable-tk \
    --disable-nis \
    --disable-dbm \
    --disable-pyo-build \
    --disable-pyc-build

而且我没有看到添加 --enable-lib2to3 来覆盖它的选项。您可能想咨询 Buildroot 社区是否可以选择。否则,我只是编辑那个 make 文件。