用pyinstaller把python脚本编译成可执行程序(windows系统)

看了一些文章,介绍pyinstaller作为一个第三方库,可以将python脚本打包成可执行程序,依葫芦画瓢,开始操作。

首先当然是下载,安装。

pip install pyinstaller
# 或者
python -m pip install pyinstaller

非常顺利,成功执行。

然后为了生成一个单一的exe执行程序,采用参数-F进行打包,命令如下:

pyinstaller -F myscript.py

执行成功,进入dist目录,看到可执行程序,非常高兴。但是在cmd窗口中执行,发现报错

Traceback (most recent call last):
  File "math.py", line 1, in 
  File "c:\users\pc\appdata\local\programs\python\python36\lib\site-packages\PyI
nstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "numpy\__init__.py", line 151, in 
  File "c:\users\pc\appdata\local\programs\python\python36\lib\site-packages\PyI
nstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "numpy\ctypeslib.py", line 369, in 
  File "numpy\ctypeslib.py", line 358, in _get_typecodes
  File "numpy\ctypeslib.py", line 358, in 
ModuleNotFoundError: No module named 'numpy.core._dtype_ctypes'
[14572] Failed to execute script myscript

通过在网上搜索,找到了解决办法:需要手工修改编译时生成的myscript.spec文件,把无法加载的库,放到hiddenimports=里面。修改后的文件内容如下:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['math.py'],
             pathex=['D:\\MyPythonWorkspaces\\Jason_python'],
             binaries=[],
             datas=[],
             hiddenimports=['numpy.core._dtype_ctypes'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='myscript',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

修改并保存这个spec文件后,再执行如下命令:

pyinstaller myscript.spec

执行成功,再次在cmd窗口中执行程序,运行正常!

 

pyinstaller的各主要参数说明

        -F 表示生成单个可执行文件;

        -D  –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。

        -w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!;

        -c  –console, –nowindowed 使用控制台,无界面(默认);

        -p 表示你自己自定义需要加载的类路径,一般情况下用不到;

        -i 表示可执行文件的图标。
 

你可能感兴趣的:(Python)