ImportError:cannot import name game

在学习《Learn Python the hard way》这本书的习题ex47的时候遇到这个问题,如图:

from ex47 import game


从包ex47中无法导入game.py文件,原因是ex47中缺少__init__.py文件,那它只是一个目录,不是一个包,所以导入失败。

下面是关于这个问题的整理:

创建一个名字为包名字的文件夹并在该文件夹下创建一个__init__.py 文件就定义了一个包。可以根据需要在该文件夹下存放资源文件、已编译扩展及子包。
包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法,其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。只要一个文件夹下面有个 __init__.py 文件,那么这个文件夹就可以看做是一个包,假如子目录中也有 __init__.py 那么它就是这个包的子包了。当你将一个包作为模块导入的时候,实际上导入了它的 __init__.py 文件。

Graphics/
      __init__.py
      Primitive/
         __init__.py
         lines.py
         fill.py
         text.py

import语句使用以下几种方式导入包中的模块:
  1. import Graphics.Primitive.fill 导入模块Graphics.Primitive.fill,只能以全名访问模块属性,例如Graphics.Primitive.fill.floodfill(img,x,y,color)
  2. from Graphics.Primitive import fill 导入模块fill ,只能以 fill.属性名这种方式访问模块属性,例如 fill.floodfill(img,x,y,color)
  3. from Graphics.Primitive.fill import floodfill 导入模块fill ,并将函数floodfill放入当前名称空间,直接访问被导入的属性,例如 floodfill(img,x,y,color)




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值