python import失败原因及解决方案

这篇具有很好参考价值的文章主要介绍了python import失败原因及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

错误从何而起?

python import失败原因及解决方案

我们从切换到a/b这个路径下, 执行python.exe ./main.py命令开始

案例: a/b/main.py导入a/package这个包

if __name__ == "__main__":
	# 报错 ModuleNotFoundError: No module named 'package'
	import package 

开始分析问题

问题:python为什么识别不到package?或者说, 什么样的[包/模块]python可以正常导入?

很容易知道, 例如: import timeimport random肯定能成功,不管在什么目录下都可以导入。

问题:那么为什么他们能导入?

因为这些[包/模块]的目录进行在sys[包/模块]的sys.path这个列表类型的变量中存在

执行 F:\Document\研究生总汇\interview\algorithm-coding\.leetcode\other\test\a\b>python ./main.py

if __name__ == "__main__":
    import sys
    print(sys.path)
    import package

输出如下:

['F:\\Document\\研究生总汇\\interview\\algorithm-coding\\.leetcode\\other\\test\\a\\b', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\python39.zip', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\DLLs', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\lib', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\lib\\site-packages', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\lib\\site-packages\\win32', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\lib\\site-packages\\win32\\lib', 
'E:\\MyComputerInstalledSoftwares\\anaconda3\\envs\\jupyterlab\\lib\\site-packages\\Pythonwin'
]

Traceback (most recent call last):
  File "F:\Document\研究生总汇\interview\algorithm-coding\.leetcode\other\test\a\b\main.py", line 4, in <module>
    import package
ModuleNotFoundError: No module named 'package'

第一个值得关注的点,返回列表的第一个元素为'F:\\Document\\研究生总汇\\interview\\algorithm-coding\\.leetcode\\other\\test\\a\\b',可以发现这个路径,就是我们执行 F:\Document\研究生总汇\interview\algorithm-coding\.leetcode\other\test\a\b>python ./main.py命令时,所处的路径。

结论

因此,我们可知执行的路径会被自动加入sys.path中,并且其中还[包/模块]含一些python自带的工具[包/模块]所处的目录。

这也是为什么同级目录下[包/模块]导入,以及python核心[包/模块]的导入没问题的原因.

开始正式解决问题

分析到此为止,很容易得到解决方案,即, 往sys.path中增加需要扫描[包/模块]的所处目录。

于是得到如下的代码:

if __name__ == "__main__":
    import sys
    # 使用相对路径
    sys.path.append("../..")
    # 或者 使用绝对路径
    sys.path.append("F:\\Document\\研究生总汇\\interview\\algorithm-coding\.leetcode\\other\\test")
    import package
    print("[包/模块]导入成功")

输出:

[包/模块]导入成功

扩展阅读: python[包/模块]扫描路径设置的其它方式

因为上述问题的本质, 是python的[包/模块]扫描路径不全导致的.

但是上述的方式有一个明显的缺点: 程序运行时添加的扫描路径, 因此其它程序需要用到该[包/模块]时, 还是需要重复的写代码添加[包/模块]的扫描路径.

文章和视频看一个即可, 更推荐看视频

视频: 设置python模块搜索路径的几种方式

文章: python中添加路径_python模块中如何添加路径?文章来源地址https://www.toymoban.com/news/detail-461527.html

到了这里,关于python import失败原因及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 报错处理:MySQL报错解决:连接失败原因与解决方案

    大家好,今天我来分享一下在Linux上遇到的一个MySQL连接失败的报错以及解决方法。如果你在尝试连接MySQL数据库时遇到以下报错信息:“Can’t connect to MySQL server on ‘localhost’ (111)”,那么请接着往下看,我会帮你找到可能的原因和解决方案。 一、问题描述 这个报错信息通常

    2024年02月04日
    浏览(46)
  • 为什么SSL会握手失败?SSL握手失败原因及解决方案

    随着网络安全技术的发展,SSL证书作为网站数据安全的第一道防线,被越来越多的企业选择。SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。当部署SSL证书时,如果服务器和客户端之间无法建立安全连接,就会发生SSL握手失败的情况。本文将为您解释导致

    2024年02月21日
    浏览(52)
  • 微信小程序获取地理位置失败原因及解决方案

    微信小程序获取用户地理位置失败的原因主要有3种情况: 1. 手机系统设置中地理位置未开启 2. 系统未给微信app授权 3. 用户未给小程序授权地理位置信息 所以需要继续完善下定位失败的处理逻辑。 1. 在获取地理位置信息失败后,首先判断用户手机系统定位服务是否开启 ||

    2024年02月10日
    浏览(341)
  • HTTP 500错误:服务器内部错误,原因及解决方案

    大家好,今天我们来聊聊一个常见的问题——HTTP 500错误,也就是服务器内部错误。这个错误就像是一个神秘的魔法,时不时地出现在你的网页上,让你的用户和你在一片懵逼中互相猜疑。 首先,我们来了解一下这个错误。HTTP 500错误是服务器在处理请求时发生了内部错误,

    2024年02月04日
    浏览(75)
  • 从原因到解决方案,深入剖析网络错误问题

    当计算机系统中的客户端(例如浏览器、应用程序等)尝试连接到远程服务器时,网络连接错误是一种常见的问题。这种错误可能会对用户造成很大的困扰,因为它可能导致无法访问网站或无法使用某些在线应用程序。而网络错误其实是我们日常开发中很难完全避免掉的一个

    2024年02月07日
    浏览(63)
  • Xshell连接不上排错以及解决方案(本文原因:重启网卡失败)

    目录 ​说一下我自己的排错思路: (1)检查自己想要链接的虚拟机有无开启 (2)检查windows服务里面关于虚拟机和xshell的服务是否已经开启,网络是否出错 (3)进入ens33文件查看ip ,dns1等是否出现配置错误 (4)检查防火墙有没有关闭 (5)查看ssh服务是否开启  (6)是否

    2024年02月04日
    浏览(43)
  • Unity创建项目失败错误解决方案

    在确保Unity Hub及编辑器正确安装完成后,创建项目时,报下图错误( Unity Launch Error ),且无法打开项目的问题   问题原因分析 :执行cmd命令:sc query null 报错:1060 指定的服务未安装 此时出现该问题的原因为系统文件null.sys错误, null服务未安装 。 解决方式 : 1. 从网上下载对

    2024年04月11日
    浏览(36)
  • HTTP 503错误:服务不可用,原因及解决方案

    在Web开发中,HTTP状态码是用于表示Web服务器响应的各种状态。其中,HTTP 503错误表示服务不可用,这意味着服务器暂时无法处理请求。这个错误通常是由于服务器过载、维护或其他原因导致的。 原因: 服务器过载:当服务器接收到的请求过多,超过了其处理能力时,就会导

    2024年02月01日
    浏览(64)
  • 手机应用app打开游戏显示连接服务器失败是什么原因?排查解决方案?

    首先,我们来看看网络问题。网络问题是导致连接服务器失败的主要原因之一。我们知道,苹果应用需要借助网络与服务器通信,以获取应用的数据和功能。如果我们的设备未连接到可靠的网络,或者网络连接不稳定,先开一下飞行模式更新一下手机网络环境,那么就很有可

    2024年02月07日
    浏览(103)
  • iTunes更新iOS17出现发生未知错误4000的原因和解决方案

    有不少人使用iTunes更新iOS 17时出现「无法更新iPhone发生未知的错误4000」的错误提示,不仅不知道iTunes升级失败的原因,也无从解决iPhone无法更新4000的问题。 小编今天就分享iPhone更新iOS系统出现4000错误提示的原因和对应的解决方案。 许多苹果用户在更新iOS 系统时,经常会遇

    2024年02月07日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包