【问题标题】:python NameError: name 'file' is not defined in python 3.5python NameError:名称'文件'未在python 3.5中定义
【发布时间】:2015-11-26 08:40:04
【问题描述】:

我有 Windows 10,带有 Aptana Studio 3。 - 我用终端在其中安装了python(v.3.5.0) - 我安装了scrapy 1.0

现在,如果我尝试运行爬虫(scrapy),我会收到以下消息:

Traceback (most recent call last):
  File "c:\python3.5\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\python3.5\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python3.5\Scripts\scrapy.exe\__main__.py", line 5, in <module>
  File "c:\python3.5\lib\site-packages\scrapy\__init__.py", line 48, in <module>
    from scrapy.spiders import Spider
  File "c:\python3.5\lib\site-packages\scrapy\spiders\__init__.py", line 10, in <module>
    from scrapy.http import Request
  File "c:\python3.5\lib\site-packages\scrapy\http\__init__.py", line 15, in <module>
    from scrapy.http.response.html import HtmlResponse
  File "c:\python3.5\lib\site-packages\scrapy\http\response\html.py", line 8, in <module>
    from scrapy.http.response.text import TextResponse
  File "c:\python3.5\lib\site-packages\scrapy\http\response\text.py", line 13, in <module>
    from scrapy.utils.response import get_base_url
  File "c:\python3.5\lib\site-packages\scrapy\utils\response.py", line 12, in <module>
    from twisted.web import http
  File "c:\python3.5\lib\site-packages\twisted\web\http.py", line 92, in <module>
    from twisted.internet import interfaces, reactor, protocol, address
  File "c:\python3.5\lib\site-packages\twisted\internet\reactor.py", line 38, in <module>
    from twisted.internet import default
  File "c:\python3.5\lib\site-packages\twisted\internet\default.py", line 56, in <module>
    install = _getInstallFunction(platform)
  File "c:\python3.5\lib\site-packages\twisted\internet\default.py", line 50, in _getInstallFunction
    from twisted.internet.selectreactor import install
  File "c:\python3.5\lib\site-packages\twisted\internet\selectreactor.py", line 18, in <module>
    from twisted.internet import posixbase
  File "c:\python3.5\lib\site-packages\twisted\internet\posixbase.py", line 18, in <module>
    from twisted.internet import error, udp, tcp
  File "c:\python3.5\lib\site-packages\twisted\internet\udp.py", line 53, in <module>
    from twisted.internet import base, defer, address
  File "c:\python3.5\lib\site-packages\twisted\internet\base.py", line 23, in <module>
    from twisted.internet import fdesc, main, error, abstract, defer, threads
  File "c:\python3.5\lib\site-packages\twisted\internet\defer.py", line 29, in <module>
    from twisted.python import lockfile, failure
  File "c:\python3.5\lib\site-packages\twisted\python\lockfile.py", line 52, in <module>
    _open = file
NameError: name 'file' is not defined

到目前为止,我知道 file() 是一个 python 2.x 函数,它不适用于来自这个 Q 的 python 3.x:python NameError: name 'file' is not defined 但问题是我不在脚本中的任何地方使用 file() 。并且该消息似乎引用了scrapy默认文件。那我该怎么办?编辑scrapy的源文件?这听起来很糟糕,而且远远超出了我的知识水平。 那么我能做什么呢? 我应该安装 python 2.7 但由于某种原因(我不记得)我尝试时无法正确安装它

那么有人对此有解决方案吗?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您可能需要更新 Twisted(到 v15.4.0 或类似的东西),因为您的版本不兼容 Python 3。

    正如 Matthias 所指出的,scrapy 正在被移植到 Python 3。但是,您遇到的错误是来自 Twisted 的 lockfile.py,而不是 scrapy:

    File "c:\python3.5\lib\site-packages\twisted\python\lockfile.py", line 52, in <module>
        _open = file
    

    Twisted 是 scrapy 的一个依赖。如果您查看history of this file,您会看到可能在 2015 年 9 月 22 日带来了 Python 3 兼容性的合并。我可以说你有一个旧版本,因为只有以前的版本在那个lockfile.py 中有_open = file

    话虽如此,您可能仍需要使用 Python 2,直到 scrapy 的其余部分更新为与 Py3 兼容。

    【讨论】:

      【解决方案2】:

      scrapy 似乎还没有完全移植到 Python 3:

      https://github.com/scrapy/scrapy/wiki/Python-3-Porting

      是的,使用 Python 2。

      【讨论】:

        猜你喜欢
        • 2013-05-20
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        • 2012-01-31
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多