尝试运行Python脚本时出现"ImportError:没有命名的模块"

Cod*_*lot 118 python ipython importerror jupyter-notebook

我正在尝试运行一个启动python脚本的脚本.我得到一个ImportError:没有名为...的模块,但是,如果我启动ipython并通过解释器以相同的方式导入相同的模块,则接受该模块.

发生了什么,我该如何解决?我试图理解python如何使用PYTHONPATH,但我完全糊涂了.任何帮助将非常感谢.

tyl*_*eha 158

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

import os
os.getcwd() 
Run Code Online (Sandbox Code Playgroud)

你会看到这是真的.

但是,假设您正在使用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
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么你手上的问题与导入路径无关,你应该提供更多关于你的问题的信息.

更好(也更永久)的解决方法是设置PYTHONPATH,它为解释器提供了python包/模块的其他目录.将PYTHONPATH编辑或设置为全局var是依赖于os的,这里将详细讨论UnixWindows.

  • PSA:如果您因为在 jupyter-notebook 中遇到此错误而遇到这个 SO 问题,请参见下面的 /sf/answers/1956146321/ 不幸的是,该问题不够具体单一答案。 (2认同)

Moh*_*med 14

__init__.py运行python项目时,只需在显示错误的文件夹下创建一个名为空的python文件.

  • 实际上__init__.py用于指示python以指示包含在该对应位置的某个包.然后只有它会在你下面创建任何子模块.如果你没有创建'_init_.py'意味着python不知道它中有一些包.例如:从"Myfolder.Mypackage导入Mymodules"为例,您应该启动__init__.py来指示python告诉这里有一些包.否则它不知道. (3认同)

z0r*_*z0r 11

确保他们都使用相同的解释器.在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]
Run Code Online (Sandbox Code Playgroud)

而且sys.path是两个解释不同.为了解决这个问题,我删除了Python 3.3.

  • 这是我的问题.我已升级到python 2.7.11,但我的iPython交互式shell仍在使用2.7.5.我只需要运行`pip install --upgrade ipython`来获取最新版本,然后它默认自动使用2.7.11. (3认同)

aca*_*828 6

这样做sys.path.append('my-path-to-module-folder')会有效,但为了避免每次想要使用模块时都必须在IPython中执行此操作,您可以添加export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"到您的~/.bash_profile文件中.


Jes*_*sse 6

主要原因是Python和IPython的sys.paths不同.

请参考lucypark链接,该解决方案适用于我的情况.安装opencv时会发生这种情况

conda install opencv

在iPython中出现导入错误,有三个步骤可以解决这个问题:

import cv2
ImportError: ...
Run Code Online (Sandbox Code Playgroud)

1.使用以下命令检查Python和iPython中的路径

import sys
sys.path
Run Code Online (Sandbox Code Playgroud)

你会发现它们的结果不同.第二步,只需sys.path.append 通过try-and-error修复错过的路径.

2.临时解决方案

在iPython中:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2
Run Code Online (Sandbox Code Playgroud)

ImportError:..问题的解决

3.永久解决方案

创建一个iPython配置文件并设置初始附加:

在bash shell中:

ipython profile create
... CHECK the path prompted , and edit the prompted config file like my case
vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py
Run Code Online (Sandbox Code Playgroud)

在vi中,附加到文件:

c.InteractiveShellApp.exec_lines = [
 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")'
]
Run Code Online (Sandbox Code Playgroud)

DONE