【问题标题】:Cannot import name ‘etree’无法导入名称“etree”
【发布时间】:2019-01-11 18:05:19
【问题描述】:

尝试从 serpscrap 包运行示例 .py 时出现错误。

我在 Pythonista 中使用 iPhoneX。

任何帮助将不胜感激。

这是回溯

Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/testing/serpscrapetest.py", line 3, in <module>
    import serpscrap
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/serpscrap/__init__.py", line 5, in <module>
    from serpscrap.serpscrap import SerpScrap
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/serpscrap/serpscrap.py", line 11, in <module>
    from scrapcore.core import Core
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/scrapcore/core.py", line 8, in <module>
    from scrapcore.cachemanager import CacheManager
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/scrapcore/cachemanager.py", line 11, in <module>
    from scrapcore.parsing import Parsing
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/scrapcore/parsing.py", line 6, in <module>
    from scrapcore.parser.google_parser import GoogleParser
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/scrapcore/parser/google_parser.py", line 7, in <module>
    from scrapcore.parser.parser import Parser
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/scrapcore/parser/parser.py", line 7, in <module>
    import lxml.html
  File "/private/var/mobile/Containers/Shared/AppGroup/C27C5B11-1804-47B9-AF18-7287A8337C55/Pythonista3/Documents/site-packages-3/lxml/html/__init__.py", line 54, in <module>
    from .. import etree
ImportError: cannot import name 'etree'

【问题讨论】:

    标签: python lxml pythonista


    【解决方案1】:

    serpscrap 显然需要lxml,尽管出于某种原因it only documents that requirement for Windows,而不是适用于所有平台。

    您不能在 Pythonista 中安装需要 C 扩展模块的软件包,例如 lxml。您似乎以某种方式安装了 lxml 的纯 Python 部分,1 但如果没有 C 扩展模块,这将没有任何好处。

    有一个未解决的问题,#245,将lxml 添加为 Pythonista 的预安装包,这可能会解决您的问题。

    所以,你的选择是:

    • 帮助 Pythonista 构建 lxml,以便他们可以关闭该错误并将 lxml 添加到下一个版本。
    • 修改serpscrap 以在没有lxml 的情况下工作(如果它只是使用lxml.etree,它可能会与stdlib ETree 实现一起工作)。
    • File a feature request with serpscrap 并希望其他人这样做。
    • 切换到不需要lxml 的其他抓取工具。

    1。我不确定这是怎么发生的。安装应该会失败。但也许serpscrap 做了一些奇怪的事情,碰巧在 Linux 和 macOS 上工作,但在 iOS 上不工作,这就是为什么他们首先将lxml 列为对 Windows 的依赖?

    【讨论】:

    • @JakeWalter 不,我没有。
    • 我用 pip 安装了 lxml
    • Pythonista 附带了使用 c 的示例,所以我不明白你为什么说它不能使用 c?
    • @JakeWalter 哪些例子?文档说 C 扩展不起作用。由于 C 扩展不起作用,存在要求添加特定模块的未解决问题。我编这个不是为了让你的生活更艰难,和我争论也不会让你的代码开始工作。
    • c 扩展在 pythonista 中不起作用。 pythonista 有一个到 ios Objective C 运行时的桥梁,但这不是新编译的 c 代码——运行时是用 c 编写的,而是基于我们可以发送的消息进行操作,并将函数桥接回 python 代码。
    【解决方案2】:

    由于 lxml 依赖关系,目前 SerpScrap 无法在 iOS 上运行。 我将更新文档以澄清这一点。

    但也许你看看 https://github.com/pybee/Python-Apple-support 。 我对iOS不熟悉,也许有人可以检查这是否有助于解决这个问题。否则,请随时在 serpscrap github 页面上打开一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2012-08-17
      • 2021-05-29
      • 2014-03-13
      • 2020-03-12
      • 2019-11-11
      相关资源
      最近更新 更多