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
有什么方法可以让 PyCharm 正确解析第一个语法?
【问题讨论】:
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_foo
或flaskext_foo
这样扩展可以转换到新的包名而不影响用户。
所以为了在版本之间过渡,添加了flask.ext
别名,它会在导入flask.ext.[name]
时自动尝试导入flask_[name]
包。但这种转变现在没有实际意义。您不再会找到仍然完全依赖于 flask.ext
的软件包。
因此,完全可以使用实际的模块名称并让 PyCharm 自动完成模块内容。
如果您仍在使用旧版本的扩展程序并且需要与未来兼容,那么您只有真正必须使用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编写脚本区域右键没有执行按钮怎么处理?我已经设置了解析器!