下面关于python中模块导入的说法错误的是,python导入库的时候出错

  下面关于python中模块导入的说法错误的是,python导入库的时候出错

  热门阅读词汇

  当一个python模块无法导入时,可能是没有安装,可能是加载过程中失败,也可能是陷入了循环导入的问题。本文对此问题进行了详细阐述。

  1.模块未安装或路径错误。

  导入错误:没有名为myModule的模块

  有两种可能。第一,模块没有安装,一般可以使用。

  pip安装%module_name%

  来解决。请注意,有时模块安装包名称不等于要导入的模块名称。在这种情况下,您可以使用pip search list命令尝试找到正确的包。

  另一种情况,虽然安装了包,但是当前运行程序的路径是错误的。Python运行时将尝试从以下位置加载python模块:

  *当前目录

  *由环境变量$PYTHONPATH指示的值,该值是由“:”分隔的字符串,每个子字符串都是文件系统的路径。

  *标准库目录,如dist-site-packages下的模块。

  *中指定的路径。pth文件,如果. pth文件存在。

  您可以通过以下方式查看python运行时的包含路径:

  导入系统

  打印(系统路径)

  将这段代码添加到错误运行的脚本的头中,然后在控制台中查看打印的python类库路径,检查安装包是否包含在上述路径中。

  * * *未包含在路径中的模块可以通过以下方式临时包含:* * *

  sys . path . append( path/to/module )

  此外,您还可以在shell窗口中查看当前的python包含路径:

  echo $PYTHONPATH

  2.无法导入现有模块。

  如果要导入的模块包含本机代码,而本机代码加载(初始化)失败,就会导致这个错误。在使用ssl、gevent等涉及native的模块时,如果没有安装相应的native程序,就会出现这种错误。

  另一种错误情况是,使用相对路径导入时,父模块还没有导入成功。请参见以下代码:

  main.py

  我的包/

  __init__。巴拉圭

  mymodule.py

  肌热模块

  Mymodule.py如下:

  #!/usr/bin/env python3

  #导出的函数

  def as_int(a):

  返回int(a)

  #模块的测试功能

  def _test()。

  assert as_int(1)==1

  if __name__==__main__ :

  _测试()

  myothermodule代码如下:

  #!/usr/bin/env python3

  从。mymodule作为_int导入

  #导出的函数

  def add(a,b):

  返回as_int(a) as_int(b)

  #模块的测试功能

  def _test()。

  断言add(1 , 1)==2

  if __name__==__main__ :

  _测试()

  如果执行my package/myothemodule,将会报告以下错误:

  回溯(最近一次呼叫):

  文件“myothermodule.py”中的第3行

  从。mymodule作为_int导入

  系统错误:父模块“”未加载,无法执行相对导入

  【本文】(Python 3中的#相对导入)给出了更详细的答案。

  3.循环导入

  这种错误被称为“循环导入”。这是python特有的导入错误,java等语言中不存在。

  假设有以下两个文件,a.py和b.py:

  #a.py

  打印“a in”

  导入系统

  print b imported:% s %(sys . modules中的 b ,)

  导入b

  打印“a输出”

  打印b.x

  并且:

  #b.py

  打印“b in”

  导入a

  打印“b输出”

  x=3

  执行python a.py,会得到以下结果:

  $ python a.py

  单

  b进口:假

  b在

  单

  b进口:对

  出局

  回溯(最近一次呼叫):

  文件“a.py ”,第4行,在

  导入b

  文件/home/shlomme/tmp/x/b.py ,第2行,在

  导入a

  文件/home/shlomme/tmp/x/a.py ,第7行,在

  打印b.x

  AttributeError:“模块”对象没有属性“x”

  原因是循环导入。循环导入,以及python在导入过程中的加锁操作,最终导致在导入完成前引用了模块B的名字。

  判断导入错误是否是循环导入造成的,主要看栈中是否有两次重复导入。比如a.py在上面的栈中出现了两次,那么可以判断这个文件导致了循环导入。

  要解决这个问题,可以把模块看作一种资源,把所有要引入的模块编号,然后按照静态资源排序的方法依次导入,避免循环导入。

  相关文章

  摘要

  如果你觉得编程之家网站内容不错,欢迎向程序员朋友推荐编程之家网站。

  此图文内容由网友收集提供,作为学习参考。版权归原作者所有。

  如果你喜欢交流学习经验,点击链接加入交流群1: 1065694478(全)交流群2: 163560250。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: