pyinstaller只打包主脚本
项目结构为一个主脚本(main.py)和很多子脚本(a.py,b.py等),但主脚本每次运行只根据输入调用一个子脚本,例如:如果输入是“a”,调用a.py;如果是“b”,调用b.py,因为经常会增加新功能,所以把这些信息放到配置文件里管理,主脚本读配置文件得知去调用哪个脚本。这样增加新功能时只需要改配置文件,和添加子脚本,其余脚本包括主脚本都不会有变动。例如配置文件里是个字典{'a':'a.py','b':'b.py'}添加c功能后变为{'a':'a.py','b':'b.py','c':'c.py'} 主脚本中读取dict得到需要映入的脚本名,然后隐式导入。
在打包过程中发现: 隐式导入需要修改打包配置----hidden-imports 且添加子脚本后需要再次打包,造成需要反复重新打包。目前打包的目的只是给个exe入口以及Python环境(所以不用embededPython来提供环境),暂时不需要考虑防止脚本被修改等问题,所以期望只打包主脚本,得到exe入口再调用子脚本.py完成功能。
没有找到相关操作的资料,来请教各位大大们,谢谢!{:10_254:}
说个思路,要把你的a.py,b.py编译成so文件或者dll文件,然后主代码里从so或者dll文件中调用相应的函数。
本帖最后由 hrpzcf 于 2021-12-31 12:03 编辑
--hidden-imports只是将未被自动检测到的脚本打包进去,你手动放进去结果也一样,为什么要重新打包?(除非你是打包成单文件?)
如果你要打包成单文件,你的main的逻辑可以改成从某一固定的相对目录比如./myscripts(即与exe同目录下的myscripts文件夹)用exec(f.read())方式运行程序,也可以import .myscripts.xxx,或者将./myscripts添加到sys.path,这样可以直接import xxx,后续直接将新脚本放到myscripts就可以。 来看看学习 hrpzcf 发表于 2021-12-31 12:02
--hidden-imports只是将未被自动检测到的脚本打包进去,你手动放进去结果也一样,为什么要重新打包?(除非 ...
不是打包成单文件,是文件夹的那种,我这里试下来如果主脚本有隐式的import,如果不加到--hidden-imports一起打包,运行exe时是会报错的 lightninng 发表于 2021-12-31 11:50
说个思路,要把你的a.py,b.py编译成so文件或者dll文件,然后主代码里从so或者dll文件中调用相应的函数。
可以试试哎,谢谢大大,鞠躬 FC的注册很坑 发表于 2021-12-31 15:47
不是打包成单文件,是文件夹的那种,我这里试下来如果主脚本有隐式的import,如果不加到--hidden-imports ...
你的main的逻辑可以改成从某一固定的相对目录比如./myscripts(即与exe同目录下的myscripts文件夹)用exec(f.read())方式运行程序,也可以import .myscripts.xxx,或者将./myscripts添加到sys.path,这样可以直接import xxx,后续直接将新脚本放到myscripts就可以。 hrpzcf 发表于 2021-12-31 16:38
我都试试,来工作了,晚些给各位大大们回复进展了{:10_282:}
页:
[1]