鱼C论坛

 找回密码
 立即注册
查看: 2235|回复: 7

[已解决]关于自定义包

[复制链接]
发表于 2023-4-1 15:11:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 歌者文明清理员 于 2023-4-1 15:12 编辑

pygame 功能齐全,但是代码有些复杂;功能强大的 cocos2d-python 虽然代码简洁,但是没那么多功能。
所以希望自己封装一个包,兼容 pygame,但是代码很简洁。
在此之前自己做了一个包练练手,结果直接报错。
代码见附件。
图片:
1. 为什么编辑器没有标注出来

                               
登录/注册后可看大图

2. 为什么手动写上 test 后,ModulenotfoundError

                               
登录/注册后可看大图

3. 为什么在 __init__.py 里加上 import test 后报错。

                               
登录/注册后可看大图
代码.zip (1.42 KB, 下载次数: 2)
最佳答案
2023-4-1 15:18:33
本帖最后由 isdkz 于 2023-4-1 15:20 编辑

把 __init__.py 中的 import test.py 改成 from . import test

把 test.py 中的 from out import print 改成 from .out import print
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-1 15:18:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-4-1 15:20 编辑

把 __init__.py 中的 import test.py 改成 from . import test

把 test.py 中的 from out import print 改成 from .out import print
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-1 15:20:41 | 显示全部楼层
isdkz 发表于 2023-4-1 15:18
把 __init__.py 中的 import test.py 改成 from . import test
PS D:\Projects\dfw> & C:/Users/           /AppData/Local/Programs/Python/Python37/python.exe d:/Projects/dfw/testot.py
Traceback (most recent call last):
  File "d:/Projects/dfw/testot.py", line 1, in <module>
    import my_pak
  File "d:\Projects\dfw\my_pak\__init__.py", line 1, in <module>
    from . import test
  File "d:\Projects\dfw\my_pak\test.py", line 1, in <module>    
    from out import print
ModuleNotFoundError: No module named 'out'
out.py 请见附件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 15:21:20 | 显示全部楼层

我加上去了,你还要把 test.py 中的 from out import print 改成 from .out import print
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-1 15:22:21 | 显示全部楼层
isdkz 发表于 2023-4-1 15:21
我加上去了,你还要把 test.py 中的 from out import print 改成 from .out import print

谢谢

但为什么要这样写?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 15:25:39 | 显示全部楼层
歌者文明清理员 发表于 2023-4-1 15:22
谢谢

但为什么要这样写?

这是相对导入,相对导入会帮你自动拼接路径,如果不用相对导入的话,

你的代码中的任何导入操作都是在 sys.path 中指定的路径导入的,sys.path 只会自动把当前目录加进去,

所以你要导入的模块不在当前目录中或者不在 sys.path 的默认目录中就得用相对导入,

否则你就得自己加入 sys.path
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-1 15:30:34 | 显示全部楼层
isdkz 发表于 2023-4-1 15:25
这是相对导入,相对导入会帮你自动拼接路径,如果不用相对导入的话,

你的代码中的任何导入操作都是在 ...

懂了
你的意思是,test.py 里的 from out import print 中,out 是在 testot.py 的目录里找的是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 15:32:20 | 显示全部楼层
歌者文明清理员 发表于 2023-4-1 15:30
懂了
你的意思是,test.py 里的 from out import print 中,out 是在 testot.py 的目录里找的是吧

对的,你把 out 改成 .out 就会在 test.py 所在的目录找 out,

不然的话你在哪里导包的就在哪个目录找
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 21:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表