【问题标题】:PyCharm resolving - flask.ext.sqlalchemy vs flask_sqlalchemyPyCharm 解析 - flask.ext.sqlalchemy 与 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

标签: python python-2.7 flask pycharm flask-sqlalchemy


【解决方案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 会通知您安装缺少的依赖项,这可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2022-11-19
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2020-05-27
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多