我试图运行一个脚本,启动,除其他外,一个python脚本。我得到一个ImportError:没有模块命名为…但是,如果我启动ipython并通过解释器以相同的方式导入相同的模块,则该模块将被接受。

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


当前回答

删除pathlib并重新安装。删除siteppackages文件夹中的pathlib,使用pip命令重新安装pathlib包:

pip install pathlib

其他回答

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

import os
os.getcwd() 

你会发现这是真的。

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

解决方案是为python解释器提供模块的路径。最简单的解决方案是将该路径附加到sys. conf文件中。路径列表。在你的笔记本上,首先试着:

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

import module_of_interest

如果这不起作用,那么您就遇到了与导入路径无关的其他问题,您应该提供有关该问题的更多信息。

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

有一个类似的问题,通过调用python3而不是python来修复它,我的模块是Python3.5。

如果有人在MSVS Code中使用conda和Jupyter Notebook时遇到这个问题,解决方案是确保您使用了正确的内核。内核位于界面右上角的一个框中,看起来像这样:

我将我的Python版本指向与我的应用程序路径匹配的Python版本——问题解决了!

我有一个类似的问题与我的Jupyter实验室设置,我通过检查Jupyter实验室日志打开解决。这告诉我,虚拟环境(pipenv)无法定位Jupyter Lab,所以它使用了一个共享版本(来自Python的早期安装)。

我创建了一个requirements.txt文件,发现我没有在这个新环境中安装Jupyter Lab。安装它解决了导入错误。

这个问题是由于不同的版本导致的——例如,如果安装在你机器上的Python安装在一个名为path_to_lib/python3.6的文件夹中,但你的笔记本电脑运行的是Python 3——命名中的空格很重要!

如何解决?

创建新的jupyter笔记本时,只需选择与您的版本相同的Python(注意空格!)见附图。