简体   繁体   中英

How to fix error with pyinstaller after compilation in exe

I compiled a Python script into an exe file, but after opening the exe, the console opens and an error occurs, then the console immediately closes. Perhaps this is due to the fact that I am using downloaded libraries (web3, bs4, hdwallet, bip_utils)

Traceback (most recent call last):
  File "CryptoWallet.py", line 11, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\__init__.py", line 21, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\wif\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\wif\wif.py", line 27, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\ecc\__init__.py", line 2, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\ecc\elliptic_curve_getter.py", line 31, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\ecc\secp256k1.py", line 39, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "bip_utils\ecc\secp256k1_keys_coincurve.py", line 25, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "coincurve\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "coincurve\context.py", line 4, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "coincurve\flags.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "coincurve\_libsecp256k1.py", line 239, in <module>
  File "cffi\api.py", line 150, in dlopen
  File "cffi\api.py", line 832, in _make_ffi_library
  File "cffi\api.py", line 827, in _load_backend_lib
OSError: cannot load library 'C:\CryptoWallet\dist\CryptoWallet\coincurve\libsecp256k1.dll': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'C:\\\CryptoWallet\\dist\\CryptoWallet\\coincurve\\libsecp256k1.dll'
[21180] Failed to execute script 'CryptoWallet' due to unhandled exception!

It seems like you need to copy the files that your project uses in to the exe. To do this you need to add-data when running pyinstaller. You can use pyinstaller spec files to configure the settings of your compilation.

Here is a example of spec file (you need to modify it for your use):

a = Analysis(['C:\\path\\to\\your\\main\\py file.py'],
             pathex=['C:\\path\\to\\search\\for\\imports'],  
             binaries=[],
             datas=[('C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\package\\xxxx\\yyyyy\\*', '.\\package\\xxxx\\yyyyy'),
             ('C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages\\package2\\zzz\\*', '.\\package2\\zzz'),
             ],
             hiddenimports=["a_package"], #A list of module names (relative or absolute) that should be part of the bundled app
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=None,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=None)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='nameOfExe',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          icon='icon.ico') # specify icon

You can check other parameters and what they do from Pyinstaller docs.

This file can be run using:

python -m PyInstaller -F main.spec --clean

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM