PyCharm 解析 - flask.ext.sqlalchemy 与 flask_sqlalchemy

Posted

技术标签:

【中文标题】PyCharm 解析 - flask.ext.sqlalchemy 与 flask_sqlalchemy【英文标题】:PyCharm resolving - flask.ext.sqlalchemy vs flask_sqlalchemy 【发布时间】:2014-10-20 12:04:42 【问题描述】:

如果我在我的应用程序中使用以下格式,则一切正常,除了 PyCharms 解析/自动完成功能:

from flask.ext.sqlalchemy import SQLAlchemy

如果我在我的应用程序中使用以下格式,一切正常。但是,唉,这不是导入库的正确方法:

from flask_sqlalchemy import SQLAlchemy

有什么方法可以让 PyC​​harm 正确解析第一个语法?

【问题讨论】:

flask_sqlalchemy 是真正的包,别名为flask.ext.sqlalchemy - 所以它可以像包一样正常工作。对我来说它工作正常:PyCharm 3.4.1。构建 #PY-135.1057,于 2014 年 6 月 10 日构建 JRE:1.7.0_65-b32 amd64 JVM:Oracle Corporation 的 OpenJDK 64 位服务器 VM。可能您的环境存在本地错误。 其实from flask_sqlalchemy import ..是正确的形式; flask.ext 别名方案已弃用:flask.pocoo.org/docs/0.10/extensiondev/#ext-import-transition flaskext 是,而不是 .ext 【参考方案1】:

flask.ext 命名空间是一个 transition 命名空间,请参阅 Flask Extension Development 文档的 Extension Import Transition section:

有一段时间我们建议使用命名空间包来扩展 Flask。这在实践中被证明是有问题的,因为存在许多不同的竞争命名空间包系统,并且 pip 会在不同的系统之间自动切换,这给用户带来了很多问题。

Flask 扩展应该促使用户从flask.ext.foo 导入而不是flask_fooflaskext_foo这样扩展可以转换到新的包名而不影响用户。

所以为了在版本之间过渡,添加了flask.ext 别名,它会在导入flask.ext.[name] 时自动尝试导入flask_[name] 包。但这种转变现在没有实际意义。您不再会找到仍然完全依赖于 flask.ext 的软件包。

因此,完全可以使用实际的模块名称并让 PyC​​harm 自动完成模块内容。

如果您仍在使用旧版本的扩展程序并且需要与未来兼容,那么您只有真正必须使用flask.ext。未来已经到来。

【讨论】:

简洁明了,为我省去了很多麻烦:-)【参考方案2】:

仅供参考。 flask.ext 已弃用,正确的做法是:

from flask_sqlalchemy import SQLAlchemy

如果有人在 Google 上发现了这个 SO 问题。

【讨论】:

【参考方案3】:

使用 virtualenv 并在 PyCharm 中为您的项目设置该 virtualenv。我遇到了和你一样的问题,在设置了正确的 virtualenv(包含 flask 和 flask_sqlalchemy 扩展)之后,我的问题就解决了。

在 PyCharm (from JetBrains Web Help) 中为您的项目设置 virtualenv:

将现有的虚拟环境添加到可用列表中 口译员 在项目设置的项目解释器页面,点击。 在下拉列表中,选择添加本地。

在打开的“选择 Python 解释器”对话框中, 选择所需的 Python 可执行文件,然后单击确定。

此外,尝试将 requirements.txt 添加到项目的根目录中,之后 PyCharm 会通知您安装缺少的依赖项,这可能会有所帮助。

【讨论】:

以上是关于PyCharm 解析 - flask.ext.sqlalchemy 与 flask_sqlalchemy的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向使用 Python 代码解析 ELF 文件 ( PyCharm 中创建 Python 程序 | 导入 ELFFile 库 | 解析 ELF 文件 )

Android 逆向使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

pycharm编写脚本区域右键没有执行按钮怎么处理?我已经设置了解析器!

Mixin 方法 super() 调用在 PyCharm 中生成一个未解析的属性引用

Pycharm 检查未标记从存根对象继承的类中未解析的引用

PyCharm 解析 - flask.ext.sqlalchemy 与 flask_sqlalchemy