1. 程式人生 > >用Pyinstaller打包時報錯

用Pyinstaller打包時報錯

我使用的python是 3.6.1 , PyInstaller用的是 3.2.1
用pyinstaller打包就出現以下情況:

C:\package>pyinstaller -F game.py
166 INFO: PyInstaller: 3.2.1
166 INFO: Python: 3.6.1
166 INFO: Platform: Windows-10-10.0.14393-SP0
166 INFO: wrote C:\package\game.spec
182 INFO: UPX is not available.
182 INFO: Extending PYTHONPATH with paths
[
'C:\\package', 'C:\\package'] 182 INFO: checking Analysis 182 INFO: Building Analysis because out00-Analysis.toc is non existent 182 INFO: Initializing module dependency graph... 199 INFO: Initializing module graph hooks... 202 INFO: Analyzing base_library.zip ... Traceback (most recent call last): File "C:\Python
36\Scripts\pyinstaller-script.py", line 11, in <module> load_entry_point('PyInstaller==3.2.1', 'console_scripts', 'pyinstaller')() File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\__main__.py", line 90, in run run_build(pyi_config, spec_file, **vars(args)) File "C:\Python
36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\__main__.py", line 46, in run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\building\build_main.py", line 788, in main build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build')) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\building\build_main.py", line 734, in build exec(text, spec_namespace) File "<string>", line 16, in <module> File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\building\build_main.py", line 212, in __init__ self.__postinit__() File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\building\datastruct.py", line 161, in __postinit__ self.assemble() File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\building\build_main.py", line 317, in assemble excludes=self.excludes, user_hook_dirs=self.hookspath) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\depend\analysis.py", line 560, in initialize_modgraph graph.import_hook(m) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 1509, in import_hook source_package, target_module_partname, level) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 1661, in _find_head_p ackage target_module_headname, target_package_name, source_package) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\depend\analysis.py", line 209, in _safe_import_module module_basename, module_name, parent_package) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 2077, in _safe_import _module module_name, file_handle, pathname, metadata) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 2167, in _load_module self._scan_code(m, co, co_ast) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 2585, in _scan_code module, module_code_object, is_scanning_imports=False) File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 2831, in _scan_byteco de global_attr_name = get_operation_arg_name() File "C:\Python36\lib\site-packages\pyinstaller-3.2.1-py3.6.egg\PyInstaller\lib\modulegraph\modulegraph.py", line 2731, in get_operatio n_arg_name return module_code_object.co_names[co_names_index] IndexError: tuple index out of range

經過各種查資料發現其實是pyinstaller3.2.1不支援Python 3.6
因此解決辦法有兩個:
1.python不要用3.6的,改用3.5的
2.刪掉python/Lib/site-packages/PyInstaller 資料夾,然後點選下載PyInstaller,解壓並把PyInstaller資料夾放到python/Lib/site-packages/目錄下面就OK了

以下是pyinstaller的一些引數說明:

-F 表示生成單個可執行檔案
-w 表示去掉控制檯視窗,這在GUI介面時非常有用。不過如果是命令列程式的話那就把這個選項刪除吧!
-p 表示你自己自定義需要載入的類路徑,一般情況下用不到
-i 表示可執行檔案的圖示