【问题标题】:Spyder automatic import of submodulesSpyder 自动导入子模块
【发布时间】:2017-07-04 01:45:12
【问题描述】:

此代码在我拥有的所有 Python 环境中都失败,但在 Spyder 中没有:

import scipy
print(scipy.integrate.cumtrapz([1, 2, 3]))

在大多数环境中你会得到

AttributeError: module 'scipy' has no attribute 'integrate'

除非您使用import scipy.integrate 来导入子模块,但不知何故,在 Spyder 中,如果您使用“在当前 Python 或 IPython 控制台中执行”运行配置,则此代码运行不会出错。如果您使用“在新的专用 Python 控制台中执行”,它会失败。显然 Spyder 正在做一些事情来自动导入子模块,但我在任何地方都找不到这种行为。

问题是 Spyder 在做什么、在哪里记录以及如何关闭它。

环境:Anaconda 3 (4.3.0)、Spyder 3.1.2、Python 3.5

【问题讨论】:

    标签: python spyder


    【解决方案1】:

    您可以从 IPython 控制台切换到 Python 控制台(那里是不同的选项卡)。问题是不同模式下的 IPython(即“matplotlib”模式)会加载很多东西,而这些东西会加载很多东西。基本上是无法控制的。

    但是,在Tools -> Preferences -> IPython console 下肯定有修改IPython 启动的方法,但我不确定您是否可以在那里禁用SciPy 导入。

    【讨论】:

    • 我还以为是自动导入,但如果你忽略了 scipy 导入,代码就会失败。所以它比这更微妙。
    • @chthonicdaemon 如果你尝试import sys; print(sorted(sys.modules.keys())),你会得到所有加载的模块。重要的是要知道导入并不意味着您可以在解释器中使用它(因为它是在另一个作用域/命名空间中加载的),它只是意味着它可以在任何地方加载。
    • 那就更接近答案了。我仍然对如果我不import scipy 代码将失败/如何失败但如果我这样做但我不import scipy.integrate 成功感兴趣
    • 因为scipy.integrate 已经在您的sys.modules 中,但您需要导入scipy,否则您将获得带有scipy 的NameError
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2016-09-22
    • 2013-01-02
    • 2012-09-23
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多