运行Python脚本时出现“ImportError: No module named”
我正在尝试运行一个脚本,这个脚本会启动其他一些东西,包括一个Python脚本。但是,我遇到了一个错误,提示ImportError: No module named ...
,也就是说找不到某个模块。不过,如果我打开ipython并在里面用相同的方式导入这个模块,它就能正常工作。
这到底是怎么回事,我该怎么解决呢?我试着去理解Python是怎么使用PYTHONPATH的,但我完全搞不懂。任何帮助都会非常感谢。
23 个回答
确保它们都在使用相同的解释器。这种情况我在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。
只需在出现错误的文件夹下创建一个空的 Python 文件,命名为 __init__.py
,然后再运行你的 Python 项目。
这个问题是因为命令行中的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作为全局变量的方式取决于操作系统,详细信息可以在这里找到,适用于 Unix 或 Windows。