小编典典

尝试运行 Python 脚本时出现“ImportError: No module named”

all

我正在尝试运行一个脚本,该脚本会启动一个 python 脚本等。我得到一个 ImportError: No module named
…,但是,如果我启动 ipython 并通过解释器以相同的方式导入相同的模块,则该模块被接受。

发生了什么事,我该如何解决?我试图了解 python 如何使用 PYTHONPATH,但我完全糊涂了。任何帮助将不胜感激。


阅读 122

收藏
2022-07-13

共1个答案

小编典典

这个问题的出现是由于命令行 IPython 解释器使用您当前路径的方式与单独进程的方式 (无论是 IPython
笔记本、外部进程等)的方式。IPython 将寻找不仅可以在您的 sys.path
中找到的要导入的模块,而且还可以在您当前的工作目录中找到。从命令行启动解释器时,您正在操作的当前目录与您启动 ipython 的目录相同。如果您运行

import os
os.getcwd()

你会看到这是真的。

但是,假设您正在使用 ipython 笔记本,运行os.getcwd()并且您当前的工作目录是您在 ipython_notebook_config.py
文件中告诉笔记本进行操作的文件夹(通常使用c.NotebookManager.notebook_dir设置)。

解决方案是为 python 解释器提供 path-to-your-module。最简单的解决方案是将该路径附加到您的 sys.path
列表中。在您的笔记本中,首先尝试:

import sys
sys.path.append('my/path/to/module/folder')

import module_of_interest

如果这不起作用,则您手上有一个与导入路径无关的问题,您应该提供有关您的问题的更多信息。

解决这个问题的更好(和更持久)的方法是设置你的 PYTHONPATH ,它为解释器提供了额外的目录来查找 python 包/模块。将
PYTHONPATH
编辑或设置为全局变量取决于操作系统,此处针对UnixWindows进行了详细讨论。

2022-07-13