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

问题描述 投票:0回答:6

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

导入它们
from my_module import my_function

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

现在我通过以下方式导入WebScraper.py

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

python python-3.x spyder
6个回答
10
投票

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

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

使用默认设置 - “正在执行的文件的目录” - Spyder 将简单地在其自己的文件夹中执行脚本,并且脚本找到模块不会有任何问题。


4
投票

您正在使用 Spyder。

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

/User/david/Document/Python/Project/

然后关闭 IPython 终端并在文件资源管理器中启动一个新终端(进入项目文件夹后)。

您的方法不起作用,因为 IPython 将 python 执行路径作为文件资源管理器(Spyder)中打开的当前路径。

运行代码;它会起作用的。

否则,您需要提供相对路径并使用:

 from . import WebScraper 
 x=WebScraper().function

1
投票

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

例如:如果您要打开命令提示符,它的提示符类似于 Windows 中的

C:\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
列表中。


1
投票

对于我来说 Spyder 5.1.5 和 Python 3.7.9 我必须重新启动 IPython 内核!

症状是这样的。

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

0
投票

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


0
投票

将 python 文件保留在同一文件夹中,只需使用以下命令将目录更改为当前 python 文件位置 导入操作系统 os.chdir("模块文件夹")

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

© www.soinside.com 2019 - 2024. All rights reserved.