找回密码
 注册
搜索
查看: 550|回复: 8

用python 全面翻写MUSH 公版机器人(2)解决import模块导入问题

[复制链接]
门派:古墓派
发表于 2019-6-4 13:54:10 | 显示全部楼层 |阅读模式
本帖最后由 kkndbdra@tj 于 2019-6-4 18:52 编辑

一般来说python用pip下载安装的模块包都不会有问题,这些模块自带path文件而且不包含mush的world对象。
但是自己编写的模块,在导入的时候是有一些问题的。
有的时候在文本编辑器里能导入的模块并且正常运作,但是打开了mush就会出现导入失败的情况。
第一类问题:python找不到模块的导入路径

这是MUSH对python支持的不大好。
解决方案一 :如果把自己编辑的全部模块例如sjtest.py放在py项目的根目录能正常导入,但是模块多了会很凌乱。
但是如果把所有的自编辑模块放在一个sjpython目录中便于管理又有可能出现python找不到相应模块的情况,
这是因为自己编辑的模块没有编写.pth文件告诉mush去哪里导入模块。

解决方案(二):自己制作一个.pth文件  随便 新建一个文本文档名称
例如:sjpath.pth 放入py项目的site-packages文件夹中,
例如我的py项目路径:C:\mushpy\venv\Lib\site-packages

然后把自己编写的模块的文件夹目录存进去,例如我把所有的自编程模块放在以下路径:C:\mushpy\sjpython  就把C:\mushpy\sjpython这条路径存入到sjpath.pth中就可以了

第二类问题:成功导入了模块但是找不到world对象
其次就是要解决如何调在python模块中调用mush自带的world相关函数的问题。
lua在模块文件中也可以直接调用world命名空间,很方便。
但是world类被mush放在world的COM组件中,只有在mush程序开启的时候才能在能在python主脚本中调用。在模块脚本里面想直接导入是调用不了的。
例如:你在模块文件test.py里写一个函数:
#coding:GBK

def pynote():
        world.note("大家好!")

然后你在main.py中导入test.py模块然后调用这个函数会失败:
#coding:GBK

import sjpython.test

sjpython.test.sjpynote():


这段文字的意思是Python解释器找不到world的定义位置,这是因为mush把world类被mush放在world的COM组件中,这个类只有在mush运行的时候才在内存里可见,但是python解释器在导入模块的时候是看不见的。

解决方案:修改模块的代码,只用在代码顶部加一个定义world的空对象就行。
#coding:GBK

world = object  # 定义一个world的空对象类型,以免导入模块的时候报错

def pynote():
        world.note("大家好!")

加完这句话以后你会发现编辑器里"world.note"下面的红线消失了。


然后在主文件import语句之后加一句编码,在MUSH运行的时候把内存里的world真实地址赋值给sjpython.test.world这个对象就行。
代码如下:

#coding:GBK

import sjpython.test
sjpython.test.world = world               # 把world的mush内存空间赋值给sjpython.test模块中的world对象


sjpython.test.sjpynote():                #

虽然在编辑器中看 world下面有红线,但是在mush开启后这个脚本是可以正常运作的。

以此类推,所有的包含mush自带world函数的模块都可以这么处理。
如果有多个模块就多写几个赋值语句把模块的world对象指向mush的world对象命名空间就行。
不包含world类的模块应该可以直接正常工作的,我测试了好几个pip安装的第三方模块包都没有问题。

然后就可以和普通py脚本一样正式开始编写python机器人啦!

本帖子中包含更多资源

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

×

评分

1

查看全部评分

门派:大轮寺
发表于 2019-6-4 16:12:21 | 显示全部楼层
自此一马平川,再无阻滞。
门派:明教
发表于 2019-6-4 17:03:15 | 显示全部楼层
这一步是最重要的,打通任督二脉啊
门派:明教
发表于 2019-6-4 18:18:42 来自手机 | 显示全部楼层
然而我却啥都不懂            
门派:桃花岛
发表于 2019-6-26 12:47:47 | 显示全部楼层
客户端有没有更换的必要呢?
门派:昆仑派
发表于 2019-6-26 13:27:12 | 显示全部楼层
得有足够的动力才会换呀  
门派:武当派
发表于 2019-6-26 13:46:57 | 显示全部楼层
厉害厉害,这么说mush可以完美支持python机器人了么?
门派:少林派
发表于 2019-6-26 14:00:15 | 显示全部楼层
可以啊,python支持就好了------------
门派:少林派
发表于 2019-6-26 15:13:46 | 显示全部楼层
能放出一一个公版的python版本吗????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-8 10:42 , Processed in 0.049033 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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