这里我选择使用Pyinstaller来打包。
打包过程中遇到了很多问题。
下面我将打包遇到的问题记录一下:
打包环境:windows10(64位)+Python2.7
打包前请先安装pywin32,pyinstaller
pip install pywin32 pip install pyinstaller |
一:打包后运行程序出现错误提示:PyInstaller Runtime Error (R6034)
出现这个错误的原因是pyinstaller版本不够高的原因
解决方案是重新安装pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip |
二:打包后运行程序出现错误提示:AttributeError: 'str' object has no attribute 'items'
出现这个错误的原因是我们的setuptools的版本不够高的原因。更新setuptools工具即可
解决方案:
pip install --upgrade setuptools |
三:windows下面python不能自动识别出imagemagick的安装目录
这个解决办法:
这个必须手动修改,修改python目录 lib/site-packages/moviepy/config_defaults.py 到imagemagic的安装目录
IMAGEMAGICK_BINARY = r"C:\Program Files\ImageMagick-6.7.3-Q16\convert.exe" |
四:用pyinstaller打包后报错:moviepy.audio.fx.all has no attribute of audio_fadein
解决方案:将python/lib/sitepackages/moviepy文件夹拷贝到MainFrame.py所在的目录。
修改moviepy/audio/fx/all 下的__init__.py文件,将exec这句注释掉,然后具体列出引入的包。
修改如下代码:
"""
Loads all the fx !
Usage:
import moviepy.audio.fx.all as afx
audio_clip = afx.volume_x(some_clip, .5)
"""
import pkgutil
import moviepy.audio.fx as fx
__all__ = [name for _, name, _ in pkgutil.iter_modules(
fx.__path__) if name != "all"]
# for name in __all__:
# exec("from ..%s import %s" % (name, name))
from moviepy.audio.fx.audio_fadein import audio_fadein
from moviepy.audio.fx.audio_fadeout import audio_fadeout
from moviepy.audio.fx.audio_left_right import audio_left_right
from moviepy.audio.fx.audio_loop import audio_loop
from moviepy.audio.fx.volumex import volumex
|
修改moviepy/video/fx/all 下的__init__.py文件,将exec这句注释掉,然后具体列出引入的包.
修改如下代码:
"""
Loads all the fx !
Usage:
import moviepy.video.fx.all as vfx
clip = vfx.resize(some_clip, width=400)
clip = vfx.mirror_x(some_clip)
"""
import pkgutil
import moviepy.video.fx as fx
__all__ = [name for _, name, _ in pkgutil.iter_modules(
fx.__path__) if name != "all"]
# for name in __all__:
# exec("from ..%s import %s" % (name, name))
from moviepy.video.fx.accel_decel import accel_decel
from moviepy.video.fx.blackwhite import blackwhite
from moviepy.video.fx.blink import blink
from moviepy.video.fx.colorx import colorx
from moviepy.video.fx.crop import crop
from moviepy.video.fx.even_size import even_size
from moviepy.video.fx.fadein import fadein
from moviepy.video.fx.fadeout import fadeout
from moviepy.video.fx.freeze import freeze
from moviepy.video.fx.freeze_region import freeze_region
from moviepy.video.fx.gamma_corr import gamma_corr
from moviepy.video.fx.headblur import headblur
from moviepy.video.fx.invert_colors import invert_colors
from moviepy.video.fx.loop import loop
from moviepy.video.fx.lum_contrast import lum_contrast
from moviepy.video.fx.make_loopable import make_loopable
from moviepy.video.fx.margin import margin
from moviepy.video.fx.mask_and import mask_and
from moviepy.video.fx.mask_color import mask_color
from moviepy.video.fx.mask_or import mask_or
from moviepy.video.fx.mirror_x import mirror_x
from moviepy.video.fx.mirror_y import mirror_y
from moviepy.video.fx.painting import painting
from moviepy.video.fx.resize import resize
from moviepy.video.fx.rotate import rotate
from moviepy.video.fx.scroll import scroll
from moviepy.video.fx.speedx import speedx
from moviepy.video.fx.supersample import supersample
from moviepy.video.fx.time_mirror import time_mirror
from moviepy.video.fx.time_symmetrize import time_symmetrize
|
注释exec方法主要是因为pyinstaller不认exec这种方式。必须手动导入。
Pyinstaller打包基本上我就遇到了上面这些问题。希望对大家有帮助。
下面说下Pyinstaller安装以及参数简单使用
1: 安装pyinstaller
pip install pyinstaller |
2: 参数说明(注意大小写)
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面是非常有用。不过如果是命令行程序的话那就删除这个选项!
-p 表示你自己定义需要加载的类路劲,一般情况下用不到
-i 表示可执行文件的图标
下面的moviepy批处理工具打包命令,分别打包两个应用:
带控制台窗口界面
pyinstaller -F --icon="favicon.ico" -p moviepy MainFrame.py |
不带控制台窗口
pyinstaller -F -w --icon="favicon.ico" -p moviepy MainFrame.py |
以上是我在学习过程中的总结,仅供大家参考!