繁体   English   中英

在 Spyder 中运行脚本时无法导入我自己的模块

[英]Cannot import my own module when running script in Spyder

根据官方 Python 文档这篇文章,将自己的模块导入脚本非常容易。 基本上我只需要创建 my.py 文件,将它们保存在一个目录中,然后我可以使用 import 它们

from my_module import my_function

这正是我在我的项目中所做的。 我写了两个脚本并将它们保存在一个目录中。 我想在第三个脚本中使用它们的一些函数(同样它保存在同一目录中)。 如下图所示。

我的蟒蛇脚本

现在我通过以下方式导入WebScraper.py 在此处输入图像描述

正如您在上图中看到的那样,有一个错误表明没有名为WebScraper的模块。 我该如何处理这个问题?

在 Spyder IDE 中,我可以从您的屏幕截图中看出,当前工作目录(显示在右上角)与脚本所在的目录(显示在编辑器面板顶部)不同。

如果您打开“工具”菜单,选择“首选项”,然后切换到“运行”选项卡,您将找到一个名为“工作目录设置”的框,您可以在其中选择“正在执行的文件的目录”或“当前工作目录”。 我怀疑,事实上,你选择了后者。 这将解释为什么找不到模块。

使用默认设置——“正在执行的文件的目录”——Spyder 将简单地在其自己的文件夹中执行脚本,并且脚本可以毫无问题地找到模块。

您正在使用 spyder。

您需要做的就是在 spyder 文件资源管理器中转到您的项目,即

/User/david/Document/Python/Project/

然后关闭 ipython 终端并在文件资源管理器中开始一个新的(在你进入项目文件夹之后)。

为什么您的方法不起作用,因为 ipython 将 python 执行路径作为在文件资源管理器 (spyder) 中打开的当前路径

运行代码,它会工作

其他明智的你需要提供相对路径和使用

 from . import WebScraper 
 x=WebScraper().function

默认情况下,大多数应用程序都有其默认工作目录。

例如:如果您将打开命令提示符,它的提示符类似于 Windows 中的C:\\Users\\<username> /Users/<username> ,MAC 中的/Users/<username>

所以肯定的是,Spyder 也将有自己的工作目录。 每当您执行任何脚本时,Spyder 都会尝试先查看该脚本。

我的建议是以编程方式检查工作目录并导航到正确的位置(如果我们在错误的位置)。 看看下面的代码。

import os
os.getcwd() # Check current directory's path
os.chdir('/Users/david/Documents/Python/Project') # Navigate

在尝试导入之后,它将起作用。

如果您愿意,可以将此路径附加到sys.path列表。

对于我在 Spyder 5.1.5 和 Python 3.7.9 上,我必须重新启动 IPython 内核!

症状是这样的。

  • 我在同一个目录中有两个模块 m1 和 m2
  • 模块 m1 导入 m2
  • Strat Spyder 并运行 m1,一切正常
  • 添加模块 m3 并从 m1 导入
  • 运行 m1,Spyder 抱怨并引发错误 ModuleNotFound
  • 重启Ipython内核,一切正常,没有错误

类似的事情发生在我身上。 我可以从终端导入,运行 python。 在 spyder 上,使用相同的 python 版本,我无法导入相同的包。 在尝试了不同的方法后,重新安装 Spyder 解决了这个问题。

将 python 文件保存在同一文件夹中,只需使用 import os os.chdir("module folder") 将目录更改为当前 python 文件位置

它会起作用。 它只对我有用。:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM