使用 virtualenv 时,Flask-Babel 失败。

3

我已经在全局包中安装了Flask、Babel和Flask-Babel。当运行Python并输入此命令时,没有错误。

>>> from flaskext.babel import Babel
>>>

通过虚拟环境,启动Python并输入相同的命令,我看到

>>> from flaskext.babel import Babel
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named flaskext.babel
>>>

问题在于我正在使用Ninja-IDE,而且显然被迫使用virtualenv。只要不破坏Flask打包系统,我就无所谓。

抱歉,但是您是否已经为该环境安装了Babel包?virtualenv现在默认使用--no-site-packages标志。 - undefined
激活虚拟环境后,尝试安装所有软件包时会显示“要求已满足”。虚拟环境中似乎没有发生任何变化。 - undefined
在激活虚拟环境的命令行中,如果在Python shell中导入SQLAlchemy没有问题,同样适用于Flask。问题只出现在Flask扩展包上。 - undefined
我尝试使用命令"virtualenv --system-site-packages venv"创建虚拟环境,但是我收到了相同的错误信息。 - undefined
我不太清楚发生了什么情况,但如果你在bash配置文件中添加$PYTONPATH环境变量,并在每个环境中获取全局包,我认为这可以解决问题:例如,导出PYTHONPATH="/usr/local/lib/python2.7/site-packages"。 - undefined
PYTHONPATH环境变量已经设置,并包含了site-packages路径。我正在使用64位的Windows 7操作系统。问题实际上出在Flask扩展查找系统上。 - undefined
4个回答

2

我认为从0.8版本开始,你应该像下面这样导入Flask扩展:

from flask.ext.babel import Babel

我尝试了老的方式 (import flaskext.babel),但是对我也没有用。


我尝试了两种方法,但都不起作用。根据Flask代码注释,我看到它将按顺序尝试三种可能的导入命名,直到成功为止。我必须确保使用正确的虚拟环境参数测试这些命名。 - undefined
我刚刚尝试了使用"virtualenv --system-site-packages venv"创建的虚拟环境,并且从flask.ext.babel中导入Babel,但是出现了以下错误信息:File "c:\Python27\Lib\site-packages\flask\exthook.py",第86行,在加载模块时引发了ImportError('No module named %s' % fullname)的异常。这意味着Flask的扩展处理代码被调用了,但是找不到该扩展。 - undefined
在virtualenv的Python Shell中尝试运行import sys; sys.path,看看它是否真的指向系统范围的site-packages目录。虽然我强烈建议使用隔离的virtualenv,并在其中安装所有内容。这是我在我的Linux系统中所做的,而进入系统site-packages的唯一软件包是通过我的发行版软件包管理器安装的那些软件包。当您在依赖不同版本相同库的多个项目上工作时,您会立即看到其好处。 - undefined
我理解virtualenv的好处。我不明白的是为什么它可以导入任何全局安装的包(这是应该的)(例如,Babel、Flask),但无法导入flask_babel包(例如,flaskext.babel)。在全局目录中,文件Lib/site-packages/flaskext/babel.py存在。它应该像其他模块一样找到它。 - undefined
请检查我的答案,通过在flaskext文件夹中添加一个空的__init__.py来解决了这个问题。非常感谢你的帮助。这引导我找到了解决方案。 - undefined

2

是的!我解决了问题!

在全局Lib/site-packages/flaskext旁边创建一个空的_init_.py文件,与babel.py文件相邻,就可以解决这个问题。

现在从本地环境导入Babel按预期工作,并且与全局环境一样工作。我们可以使用两种形式from flaskext.babel import Babel和from babel.ext.babel import Babel。但是,*from flask_babel import Babel*或*import flask_babel*这两种形式不起作用。

请注意,我在Windows 7 64位上运行Python 2.7,路径为C:\Python27。在unix计算机上,缺少init.py文件可能不是问题。


1

以前导入Flask扩展的方式是这样的:

import flaskext.babel

命名空间包对于所有参与者来说,“太痛苦了”,因此现在Flask扩展可以像这样导入:

import flask_babel

flask.ext 是一个特殊的包。如果你 import flask.ext.babel,它将尝试上述两种变体,因此它应该在任何情况下都能正常工作。


在全局和本地环境中,import flask_babel 表单无法工作。flask.exthook.py 中的注释表明情况并非如此。你的建议应该有效,但不幸的是并没有。非常感谢你帮助我解决这个问题。 - undefined

0
在Python 3中安装Flask-Babel的方法如下:pip install Flask-Babel。 安装完成后,引入模块的方法如下:from flask.ext.babel import Babel,但需要注意会收到弃用警告,所以你可以这样引入模块:from flask_babel import Babel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接