我正在尝试运行一个脚本,该脚本会启动一个 python 脚本等。我得到一个 ImportError: No module named …,但是,如果我启动 ipython 并通过解释器以相同的方式导入相同的模块,则该模块被接受。
发生了什么事,我该如何解决?我试图了解 python 如何使用 PYTHONPATH,但我完全糊涂了。任何帮助将不胜感激。
这个问题的出现是由于命令行 IPython 解释器使用您当前路径的方式与单独进程的方式 (无论是 IPython 笔记本、外部进程等)的方式。IPython 将寻找不仅可以在您的 sys.path 中找到的要导入的模块,而且还可以在您当前的工作目录中找到。从命令行启动解释器时,您正在操作的当前目录与您启动 ipython 的目录相同。如果您运行
import os os.getcwd()
你会看到这是真的。
但是,假设您正在使用 ipython 笔记本,运行os.getcwd()并且您当前的工作目录是您在 ipython_notebook_config.py 文件中告诉笔记本进行操作的文件夹(通常使用c.NotebookManager.notebook_dir设置)。
os.getcwd()
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 编辑或设置为全局变量取决于操作系统,此处针对Unix或Windows进行了详细讨论。