Python3'无法导入名称'cached_property'

Ste*_*urr 14 python python-3.x

我不能让它工作。我一直在添加模块,但每次都找不到新的模块。为什么这段代码在 Python3.6 中不起作用?

代码:

from robobrowser import robobrowser
from bs4 import BeautifulSoup
import urllib2 
import cookielib
from werkzeug import werkzeug
from cached_property import cached_property

cj = cookielib.CookieJar()
br = robobrowser.Browser()
br.set_cookiejar(cj)
br.open("https://www.cbssports.com/login")

br.select_form(nr=0)
br.form['userid'] = 'steveb1164'
br.form['password'] = ''
br.submit()

print(br.response().read())
Run Code Online (Sandbox Code Playgroud)

跑:

RESTART: C:/Users/Steve/AppData/Local/Programs/Python/Python36-32/CBSlogin.py 
Traceback (most recent call last):
  File "C:/Users/Steve/AppData/Local/Programs/Python/Python36-32/CBSlogin.py", line 1, in <module>
    from robobrowser import robobrowser
  File "C:\Users\Steve\AppData\Local\Programs\Python\Python36-32\lib\site-packages\robobrowser\robobrowser\__init__.py", line 3, in <module>
    from .browser import RoboBrowser
  File "C:\Users\Steve\AppData\Local\Programs\Python\Python36-32\lib\site-packages\robobrowser\robobrowser\browser.py", line 8, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property'
Run Code Online (Sandbox Code Playgroud)

小智 24

通过在 Flask 导入之前插入这些行,我让 werkzeug 应用程序在 Python 3.6 中运行:

import werkzeug
werkzeug.cached_property = werkzeug.utils.cached_property
Run Code Online (Sandbox Code Playgroud)

  • 在“import robobrowser”之前插入这个解决了我的问题 (7认同)

Noe*_*ans 10

如果您在使用 Flask Rest-Plus 时看到此问题,则说明开发团队存在问题

https://github.com/noirbizarre/flask-restplus/issues/777

观察到:

“降级到 Werkzeug 到 0.16.0(暂时)解决了这个问题。”

  • 据我了解,restplus 现已不复存在,Flask RESTX 正在取代它作为直接分叉。https://flask-restx.readthedocs.io/en/latest/ (2认同)

Bob*_*ath 5

回复有点晚了,但我可能已经找到了解决方案。

您需要将 werkzeug import cached property 重命名为以下内​​容:

from werkzeug.utils import cached_property
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


hsp*_*her -2

尝试重新安装该werkzeug软件包。

pip uninstall Werkzeug
pip install Werkzeug
Run Code Online (Sandbox Code Playgroud)