尝试运行 Python 脚本时出现“ImportError:未命名模块”

2025-02-27 09:07:00
admin
原创
60
摘要:问题描述:我正在尝试运行一个脚本,该脚本除其他内容外还启动一个 python 脚本。我得到了一个ImportError: No module named ...,但是,如果我启动 ipython 并以相同的方式通过解释器导入相同的模块,则该模块会被接受。发生了什么事,我该如何解决?我试图了解 python 如...

问题描述:

我正在尝试运行一个脚本,该脚本除其他内容外还启动一个 python 脚本。我得到了一个ImportError: No module named ...,但是,如果我启动 ipython 并以相同的方式通过解释器导入相同的模块,则该模块会被接受。

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


解决方案 1:

这个问题的出现是因为命令行 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进行了详细讨论。

解决方案 2:

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

解决方案 3:

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

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

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

sys.path两个解释器之间存在差异。为了解决这个问题,我删除了 Python 3.3 。

解决方案 4:

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

请参考lucypark 链接,该解决方案适用于我的情况。当通过以下方式安装 opencv 时会发生这种情况

conda install opencv

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

import cv2
ImportError: ...

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

import sys
sys.path

你会发现 Python 和 Jupyter 的结果不同。第二步,只需sys.path.append 通过尝试和错误来修复错过的路径。

2. 临时解决方案

在 iPython 中:

import sys
sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages')
import cv2

问题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

在 vi 中,附加到文件:

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

完毕

解决方案 5:

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

解决方案 6:

这是我修复它的方法:

import os
import sys
module_path = os.path.abspath(os.getcwd() + '\\..')
if module_path not in sys.path:
    sys.path.append(module_path)

解决方案 7:

我发现这个问题的解决方案在这里已有详细记录:

https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

基本上,您必须在 Jupyter 环境中安装软件包,并发出如下 shell 命令:

!{sys.executable} -m pip install numpy

请查看上面的链接以获得权威的完整答案。

解决方案 8:

在安装 ipython 之前,我通过 easy_install; say 安装了模块sudo easy_install mechanize

安装 ipython 后,我必须重新运行 easy_install 以便 ipython 识别模块。

解决方案 9:

如果您从命令行运行它,有时 Python 解释器不知道在哪里寻找模块的路径。

以下是我的项目的目录结构:

/project/apps/..
/project/tests/..

我正在运行以下命令:

>> cd project

>> python tests/my_test.py

运行上述命令后我收到以下错误

no module named lib

lib 已导入 my_test.py

我打印了 sys.path 并发现我正在处理的项目的路径在 sys.path 列表中不可用

我在脚本的开始处添加了下面的代码my_test.py

import sys
import os

module_path = os.path.abspath(os.getcwd())    

if module_path not in sys.path:       

    sys.path.append(module_path)

我不确定这是否是解决问题的好方法,但它确实对我有用。

解决方案 10:

这种错误很可能是由于 Python 版本冲突而发生的。例如,如果您的应用程序只能在 Python 3 上运行,而您也有 Python 2,那么最好指定要使用的版本。例如使用

python3 .....

而不是

python

解决方案 11:

如果符合以下条件,则此答案适用于此问题

  1. 你不想更改你的代码

  2. 您不想永久更改 PYTHONPATH

临时修改PYTHONPATH

下面的路径可以是相对的

PYTHONPATH=/path/to/dir python script.py

解决方案 12:

遇到了类似的问题,通过调用python3而不是来修复它python,我的模块在Python3.5中。

解决方案 13:

发生在我目录上utils。我试图将该目录导入为:

from utils import somefile

utils已经是 Python 中的一个包。只需将目录名称更改为其他名称,它就可以正常工作。

解决方案 14:

出现此问题是由于版本不同造成的 - 例如,如果您机器上安装的 Python 安装在名为的文件夹中,path_to_lib/python3.6但您的笔记本正在其中运行Python 3- 命名中的间距很重要!

如何解决?

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

选择正确的 Python 版本

解决方案 15:

发生这种情况的一个非常微妙的方式是当您的文件名与 anaconda 环境名称相同时。我遇到过这种情况,因为两个不同的文件中的代码完全相同,其中一个文件被意外命名为 anaconda 环境,引发了“未找到模块错误”。

解决方案 16:

我发现了这种差异的另一个根源:

我在本地和虚拟环境中都安装了 ipython。我的问题是,在一个新创建的带有 ipython 的虚拟环境中,系统 ipython 被选中,而它的版本与虚拟环境中的 python 和 ipython 不同(2.7.x 与 3.5.x),然后发生了有趣的事情。

我认为,无论何时安装包含二进制文件的东西,最明智的做法yourvirtualenv/bin是立即运行rehash或类似使用的任何 shell,以便获取正确的 python/ipython。(必须检查是否有合适的pip安装后挂钩......)

解决方案 17:

无需脚本的解决方案:

  1. 打开 Spyder -> 工具 -> PYTHONPATH 管理器

  2. 点击“添加路径”添加 Python 路径。例如:'C:\Users\User\AppData\Local\Programs\Python\Python37\Lib\site-packages'

  3. 单击“同步...”以允许其他程序(例如 Jupyter Notebook)使用步骤 2 中设置的 pythonpaths。

  4. 如果 Jupyter 已打开,请重新启动它

解决方案 18:

这可能是由于您的系统上安装了不同的 python 版本(例如python2python3 )造成的。

运行命令$ pip --version$ pip3 --version检查哪个pip来自Python 3x。例如,你应该看到如下版本信息:

pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

然后example.py使用以下命令运行脚本

$ python3 example.py

解决方案 19:

import sys
sys.path.append('/Users/{user}/Library/Python/3.7/lib/python/site-packages')
import ta

解决方案 20:

如果有人在 MSVS Code 中使用 Jupyter Notebook 时遇到此问题conda,解决方案是确保使用正确的内核。内核位于界面右上角的一个框中,如下所示:

在此处输入图片描述

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

解决方案 21:

这对我有用:我只是改变了笔记本里的工作目录

import os

os.chdir("my/path/to/module")
os.getcwd() 

解决方案 22:

我在设置 Jupyter Lab 时遇到了类似的问题,我通过打开时检查 Jupyter Lab 日志解决了这个问题。它告诉我虚拟环境 (pipenv) 无法找到 Jupyter Lab,因此它使用了共享版本(来自早期安装的 Python)。

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

解决方案 23:

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

pip install pathlib
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2974  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1836  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   47  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   47  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用