解决使用pyinstaller打包moviepy项目后无法启动(xxx has no attribute xxx)

发布于 / Python / Comments Off on 解决使用pyinstaller打包moviepy项目后无法启动(xxx has no attribute xxx)

使用moviepy写了一个项目,准备打包成exe文件,使用了pyinstaller。

打包后运行,却是这样的场景:

image.png

初步观察错误类型应该是moviepy中少编译了一个库,pyinstaller根据import链字节码生成执行文件,如果项目中调用了,按理说应该是会编译进来的。

阅读到了ZiddyEng在https://github.com/Zulko/moviepy/issues/591上的发言,准备从moviepy内部动手,研究这个问题。

在AppData\Local\Programs\Python\Python38-32\Lib\site-packages\moviepy\video\fx\all内的__init__.py中发现了这个语句:

__all__ = [name for _, name, _ in pkgutil.iter_modules(
    fx.__path__) if name != "all"]

for name in __all__:
    exec("from ..%s import %s" % (name, name))

moviepy要import进来的包不是使用标准import形式,而是写成了字符串,使用exec执行的方式引入。

在下面加上print(__all__)

image.png

运行一下写的moviepy程序,打印结果如下

image.png

说明把这些库给手动引入就好了

直接在for循环里添加这句话,在运行时,把输出的粘进去就好了

image.png

image.png

image.png

AppData\Local\Programs\Python\Python38-32\Lib\site-packages\moviepy\audio\fx\all\__init__.py那边也做同样的操作

image.png

再次打包,一切OK

转载原创文章请注明,转载自: 斐斐のBlog » 解决使用pyinstaller打包moviepy项目后无法启动(xxx has no attribute xxx)
评论已关闭