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

215 投票
23 回答
446251 浏览
提问于 2025-04-17 19:42

我正在尝试运行一个脚本,这个脚本会启动其他一些东西,包括一个Python脚本。但是,我遇到了一个错误,提示ImportError: No module named ...,也就是说找不到某个模块。不过,如果我打开ipython并在里面用相同的方式导入这个模块,它就能正常工作。

这到底是怎么回事,我该怎么解决呢?我试着去理解Python是怎么使用PYTHONPATH的,但我完全搞不懂。任何帮助都会非常感谢。

23 个回答

19

确保它们都在使用相同的解释器。这种情况我在Ubuntu上遇到过:

$ ipython3 -c 'import sys; print(sys.version)'
3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]

$ python3 -c 'import sys; print(sys.version)'
3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]

而且两个解释器的sys.path是不一样的。为了解决这个问题,我删除了Python 3.3。

20

只需在出现错误的文件夹下创建一个空的 Python 文件,命名为 __init__.py,然后再运行你的 Python 项目。

246

这个问题是因为命令行中的IPython解释器使用当前路径的方式和其他进程(比如IPython笔记本、外部进程等)使用的方式不同。IPython会查找要导入的模块,这些模块不仅在你的sys.path中,还在你当前的工作目录中。当你从命令行启动解释器时,你正在操作的当前目录就是你启动ipython时所在的目录。如果你运行

import os
os.getcwd() 

你会发现这是真的。

但是,假设你在使用ipython笔记本,运行 os.getcwd(),这时你的当前工作目录可能是你在ipython_notebook_config.py文件中指定的文件夹(通常是通过 c.NotebookManager.notebook_dir 设置的)。

解决这个问题的方法是给python解释器提供你的模块的路径。最简单的办法是把这个路径添加到你的sys.path列表中。在你的笔记本中,首先尝试:

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

import module_of_interest

如果这样不行,那你就遇到了与导入路径无关的其他问题,你需要提供更多关于你问题的信息。

更好(也是更永久)的解决方法是设置你的 PYTHONPATH,这样可以让解释器在额外的目录中查找python包/模块。编辑或设置PYTHONPATH作为全局变量的方式取决于操作系统,详细信息可以在这里找到,适用于 UnixWindows

撰写回答