我是python和flask的新手.我正在尝试通过http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world上的烧瓶教程.我遇到了一个我无法弄清楚的错误.我已经详尽地(我认为)寻找了解决方案,但我找不到适合我的问题的解决方案.我已经卸载并重新安装了烧瓶.我甚至创造了一个新的venv并重新开始,但没有任何效果.
我正在尝试构建一个简单的Web表单应用程序.我创建了一个表单:
from flask_wtf import Form
from wtforms import StringField, BooleanField
from wtforms.validators import DataRequired
class LoginForm(Form):
openid = StringField('openid', validators=[DataRequired()])
remember_me = BooleanField('remember_me', default=False)
Run Code Online (Sandbox Code Playgroud)
当我导入LoginForm时,我收到错误
TypeError: an integer is required (got type str)
Run Code Online (Sandbox Code Playgroud)
完整的堆栈跟踪在这里:
C:\microblog\flask\Scripts\python.exe C:/microblog/run.py
Traceback (most recent call last):
File "C:/microblog/run.py", line 2, in <module>
from app import app
File "C:\microblog\app\__init__.py", line 6, in <module>
from app import views
File "C:\microblog\app\views.py", line 5, in <module>
from .forms import LoginForm
File "C:\microblog\app\forms.py", line 3, in <module>
from flask_wtf import Form
File "C:\microblog\flask\lib\site-packages\flask_wtf\__init__.py", line 15, in <module>
from .form import Form
File "C:\microblog\flask\lib\site-packages\flask_wtf\form.py", line 15, in <module>
from .i18n import translations
File "C:\microblog\flask\lib\site-packages\flask_wtf\i18n.py", line 12, in <module>
from flask_babel import get_locale
File "C:\microblog\flask\lib\site-packages\flask_babel\__init__.py", line 21, in <module>
from babel import dates, numbers, support, Locale
File "C:\microblog\flask\lib\site-packages\babel\dates.py", line 28, in <module>
from babel.util import UTC, LOCALTZ
File "C:\microblog\flask\lib\site-packages\babel\util.py", line 278, in <module>
from babel import localtime
File "C:\microblog\flask\lib\site-packages\babel\localtime\__init__.py", line 21, in <module>
from babel.localtime._win32 import _get_localzone
File "C:\microblog\flask\lib\site-packages\babel\localtime\_win32.py", line 18, in <module>
tz_names = get_global('windows_zone_mapping')
File "C:\microblog\flask\lib\site-packages\babel\core.py", line 58, in get_global
_global_data = pickle.load(fileobj)
TypeError: an integer is required (got type str)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏 - 这让我疯了!
这是python包索引上的babel 2.0包中的构建错误
https://github.com/mitsuhiko/babel/issues/174
总而言之,babel/global.dat
包中包含一个pickle文件,python 3无法读取它,因为它是由在python 2下运行的脚本创建的.
我通过在github问题中建议从github而不是PyPI安装来解决这个问题:
pip install git+https://github.com/mitsuhiko/babel.git@2.0
Run Code Online (Sandbox Code Playgroud)
小智 0
与您几乎在同一时间遇到了这个完全相同的问题 - 我非常兴奋地看到一个 stackoverflow 页面,却发现它没有得到解答。我似乎已经找到了解决办法,但我要警告的是,我绝不是专家,明天可能会发现这会破坏其他东西。
在 core.py 的依赖项中,我发现根据您运行的 python 版本, /babel/_compat.py 导入 cPickle 或 pickle,这就是 core.py 作为 pickle 导入的内容。
我将 /babel/_compat.py 中的第 22 行更改为
import cPickle as pickle
Run Code Online (Sandbox Code Playgroud)
到
import pickle
Run Code Online (Sandbox Code Playgroud)
你瞧,一切正常。
同样,这可能破坏了很多我不知道的事情,但从我读到的内容来看,cPickle 似乎更快,所以这只会牺牲速度并且不会改变功能。如果您只是遵循烧瓶教程,我怀疑这会是一个问题。
归档时间: |
|
查看次数: |
5561 次 |
最近记录: |