旧内容已过时
本质使用exec和sys.path,在项目打包时会造成各种问题。
下面的东西不用看了,看了浪费时间。(不想改单纯是因为已经打算不用CSDN了,因此文章内容不再维护
再更新
修好的XJImporter脚本发在别的博客里了:https://blog.csdn.net/weixin_44733774/article/details/126737346#XJImporter_42
打包后的程序总算能正常运行了
更新
如果项目是要打包运行的话那别用我下面的XJImporter脚本
好不容易把自己的一个整烂活给搞完,然后一打包,hjh程序根本跑不了,然后分析了一会儿发现,多半是因为导入错误,于是就把我所有用到XJImporter的代码全部删掉改成相对路径导入,一改就是几十分钟,巨恶心,而且还一语成谶,当时说什么“理想的python项目应该会导致项目根目录下堆满一堆的test脚本”结果还真中了。(应该是有别的更好的python的项目管理方法,例如打包成pyc?以后再了解吧
目前我暂时不想分析打包运行失败的原因,因为这一搞估计又是一天,乏了乏了,有心情再搞
原文
额,python什么都好,就一点不好,那就是项目的管理很让人头疼。场景如下:
我有一个项目,名为[Test],项目结构如下:
其中,Module_A需要导入模块Tool,但Tool.py并不与Module_A.py处于同一目录,也就是Module_A如果作为脚本运行的话根本没法直接导入模块Tool,只能作为模块将Tool导入。这就意味着Module_A的调试不能在Module_A.py中进行,而要在Tool所在路径下创建py脚本,然后将Module_A导入才能进行调试。这就涉及到py的“模块”和“脚本”的概念
以下是对脚本和模块的基本区分:
- 能双击直接运行的py文件视为脚本。
- 不能双击运行的py文件视为模块。
- 脚本可以作为模块被其他py文件导入,但脚本不一定能作为模块。
- 模块不能直接运行,也就是模块一定不会是脚本。
以下是个人支离破碎的理解:
- 如果py文件中使用了相对路径导入,那么这个py文件将无法作为脚本直接运行,只能作为模块被导入。
from . import XXX
from .XXX import classX
- 跨目录导入也视为相对路径导入,一样不能作为脚本直接运行。
如模块导入语句from XXX import classX<