python用pyinstaller生成exe時報錯 TypeError: an integer is required (got type bytes)

熱衷開源的Boy發表於2020-11-28

python用pyinstaller生成exe時報錯:

126 INFO: PyInstaller: 3.5
126 INFO: Python: 3.8.0
126 INFO: Platform: Windows-10-10.0.15063-SP0
128 INFO: wrote C:\report\ToExe\pywin32-217\pywin32-217\TestHandler.spec
130 INFO: UPX is not available.
133 INFO: Extending PYTHONPATH with paths
[‘C:\report\ToExe\pywin32-217\pywin32-217’,
‘C:\report\ToExe\pywin32-217\pywin32-217’]
133 INFO: checking Analysis
199 INFO: checking PYZ
199 INFO: Building PYZ because PYZ-00.toc is non existent
201 INFO: Building PYZ (ZlibArchive) C:\report\ToExe\pywin32-217\pywin32-217\build\TestHandler\PYZ-00.pyz
Traceback (most recent call last):
File “c:\python\python38-32\lib\runpy.py”, line 192, in run_module_as_main
return run_code(code, main_globals, None,
File “c:\python\python38-32\lib\runpy.py”, line 85, in run_code
exec(code, run_globals)
File “C:\Python\Python38-32\Scripts\pyinstaller.exe_main.py”, line 7, in
File “c:\python\python38-32\lib\site-packages\PyInstaller_main.py”, line 111, in run
run_build(pyi_config, spec_file, **vars(args))
File “c:\python\python38-32\lib\site-packages\PyInstaller_main.py”, line 63, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\build_main.py”, line 844, in main
build(specfile, kw.get(‘distpath’), kw.get(‘workpath’), kw.get(‘clean_build’))
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\build_main.py”, line 791, in build
exec(code, spec_namespace)
File “C:\report\ToExe\pywin32-217\pywin32-217\TestHandler.spec”, line 18, in
pyz = PYZ(a.pure, a.zipped_data,
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\api.py”, line 98, in init
self.postinit()
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\datastruct.py”, line 158, in postinit
self.assemble()
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\api.py”, line 128, in assemble
self.code_dict = {
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\api.py”, line 129, in
key: strip_paths_in_code(code)
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\utils.py”, line 652, in strip_paths_in_code
consts = tuple(
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\utils.py”, line 653, in
strip_paths_in_code(const_co, new_filename)
File “c:\python\python38-32\lib\site-packages\PyInstaller\building\utils.py”, line 660, in strip_paths_in_code
return code_func(co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize,
TypeError: an integer is required (got type bytes)

解決辦法:報錯前的pyinstaller是用 pip install pyinstaller 來安裝的,改成用 pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz 再安裝一次

其它說明:如果電腦中同時存在多個版本的python可能會導致各種問題(比如 “failed to execute script xxx” 、“failed to create process”),如果不是特別熟悉使用python只是為了偶爾使用的話最好把以前安裝的多餘的python版本刪掉或全部刪掉重新安裝(到官網下載最新的安裝程式,網上說32位的相容性比較好),安裝步驟可參考:https://blog.csdn.net/weixin_40844416/article/details/80889165

後續補充(填坑):
用這種方法生成的exe在某些電腦上執行沒問題,但到了某些電腦上就報failed to execute script pyi_rth_multiprocessing 等錯誤,最後解決方法是重新安裝python3.5 + 用pip install pyinstaller來安裝解決

相關文章