#676·LaZagne

Precompiled version for Mac OS X ("universal2") / Instructions for "PyInstaller" on Mac OS X?

Author: InfiniteBSODCreated Oct 18, 2025Updated Oct 18, 2025

Hello,

First off thank you so much for your work.

Now to my suggestion and question.

Suggestion: There is a precompiled version for Windows - an EXE - but not a precompiled version for Mac OS X. A precompiled version for Mac OS X which is architecture agnostic meaning it will run regardless on x86-64 (Intel) or arm64 (Apple Silicon) would be very much appreciated.

Question: I tried to make a precompiled version of the 2.4.7-release on my Intel MacBook Air running Sequoia 15.4.1. I downloaded Python 3.14.0 and installed the latest version of "PyInstaller" through PIP. During the first run of PyInstaller the packaging failed due to a lack of Xcode's developer tools. I tried to build the package using this command: pyinstaller --target-arch universal2 --add-data lazagne:lazagne laZagne.py The next run of pyinstaller successfully built the package but I received the following errors when executing: ./lazagne all -password mypassword123

(Naturally "mypassword123" isn't my actual password)

[-] Chrome safe storage key has not been retrieved, cannot decrypt passwords
[-] Module HashDump is not used due to unresolved dependence:
No module named 'lazagne.softwares.system'
[-] Module ChainBreaker is not used due to unresolved dependence:
No module named 'lazagne.softwares.system'
[-] Module System is not used due to unresolved dependence:
No module named 'lazagne.softwares.system'
[-] Module Thunderbird is not used due to unresolved dependence:
No module named 'lazagne.softwares.mails'
[-] Module Mozilla is not used due to unresolved dependence:
No module named 'lazagne.softwares.browsers.mozilla'

The next attempt to build the package included the missing modules: pyinstaller --target-arch universal2 --add-data lazagne:lazagne laZagne.py

 ------------------- Chrome passwords -----------------

[-] Chrome safe storage key has not been retrieved, cannot decrypt passwords
[!] No passwords found
 ------------------- Chainbreaker passwords -----------------

[-] /Library/Keychains/system-keychain-2.db-shm Open Failed
[-] Invalid Keychain Format
[-] /Library/Keychains/system-keychain-2.db-wal Open Failed
[-] Invalid Keychain Format
[-] /Library/Keychains/system-keychain-2.db Open Failed
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[!] No passwords found
 ------------------- System passwords -----------------

[!] No passwords found
 ------------------- Hashdump passwords -----------------

[-] Module HashDump is not used due to unresolved dependence:
No module named 'xml.etree'
[!] No passwords found
 ------------------- Thunderbird passwords -----------------

[-] Module Thunderbird is not used due to unresolved dependence:
No module named 'pyasn1'
[!] No passwords found
 ------------------- Mozilla passwords -----------------

[-] Module Mozilla is not used due to unresolved dependence:
No module named 'pyasn1'
[!] No passwords found

[+] 0 passwords have been found.

elapsed time = 0.742318868637085

I then installed the following packages using PIP: xml.etree pyasn1

and tried to build the package again using this command:

pyinstaller --target-arch universal2 --add-data lazagne:lazagne --collect-all xml.etree --collect-all pyasn1 laZagne.py

which returned the following errors when trying to run lazagne with this command: sudo ./lazagne all -password mypassword123 -vvv

 ------------------- Chrome passwords -----------------

[-] Chrome safe storage key has not been retrieved, cannot decrypt passwords
[!] No passwords found
 ------------------- Hashdump passwords -----------------

 ------------------- Chainbreaker passwords -----------------

[-] Invalid Keychain Format
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[-] Invalid Keychain Format
[!] No passwords found
 ------------------- System passwords -----------------

[!] No passwords found
 ------------------- Thunderbird passwords -----------------

[-] Module Thunderbird is not used due to unresolved dependence:
No module named 'configparser'
[!] No passwords found
 ------------------- Mozilla passwords -----------------

[-] Module Mozilla is not used due to unresolved dependence:
No module named 'configparser'
[!] No passwords found

[+] 0 passwords have been found.

elapsed time = 0.5076510906219482

Installed the following using PIP: configparser

and tried to build the package again using the following command: pyinstaller --target-arch universal2 --add-data lazagne:lazagne --collect-all xml.etree --collect-all pyasn1 --collect-all configparser laZagne.py

and running lazagne with:

[!] Python 3.14.0 on Darwin x86_64: i386

 ------------------- Chrome passwords -----------------

[-] Chrome safe storage key has not been retrieved, cannot decrypt passwords
[!] No passwords found
 ------------------- Firefox passwords -----------------

[!] No passwords found
 ------------------- Thunderbird passwords -----------------

[!] No passwords found
 ------------------- Hashdump passwords -----------------

[!] Traceback (most recent call last):
  File "lazagne/config/run.py", line 70, in run_module
    constant.st.print_output(i.capitalize(), pwd_found)  # print the results
    ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "lazagne/config/write_output.py", line 145, in print_output
    pwd_found = [dict(t) for t in set([tuple(d.items()) for d in pwd_found])]
                                             ^^^^^^^
AttributeError: 'str' object has no attribute 'items'

 ------------------- Chainbreaker passwords -----------------

[!] SystemKey file could not be openned: 'utf-8' codec can't decode byte 0xfa in position 0: invalid start byte
[!] Trying to dump keychain /Library/Keychains/system-keychain-2.db-shm with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Library/Keychains/System.keychain with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Library/Keychains/system-keychain-2.db-wal with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Library/Keychains/apsd.keychain with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Library/Keychains/system-keychain-2.db with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Users/infinitebsod/Library/Keychains/login.keychain-db with password mypassword123
[-] Invalid Keychain Format
[!] Trying to dump keychain /Users/infinitebsod/Library/Keychains/metadata.keychain-db with password mypassword123
[-] Invalid Keychain Format
[!] No passwords found
 ------------------- System passwords -----------------

[!] No passwords found

[+] 0 passwords have been found.

elapsed time = 0.49904680252075195

So if either the instructions on how to successfully use PyInstaller to build a package for Mac OS X would be included or that a precompiled version (that run regardless on x86-64 and arm64) would be included in releases that would be very much appreciated it.

If someone sees what I am doing wrong with Pyinstaller I would also very much appreciate if you could reply to this issue so I can build lazagne for Mac OS X.

Best Regards - InfiniteBSOD


Update 1:

Tried to use the "lazagne.spec"-file with PyInstaller and received the following output when executing: PyInstaller lazagne.spec

489 INFO: PyInstaller: 6.16.0, contrib hooks: 2025.9
490 INFO: Python: 3.14.0
696 INFO: Platform: macOS-15.4.1-x86_64-i386-64bit-Mach-O
697 INFO: Python environment: /Library/Frameworks/Python.framework/Versions/3.14
882 INFO: Module search paths (PYTHONPATH):
['/Library/Frameworks/Python.framework/Versions/3.14/lib/python314.zip',
 '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14',
 '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages',
 '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/setuptools/_vendor',
 '.',
 '/Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac',
 '/Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac']
1465 INFO: checking Analysis
1466 INFO: Building Analysis because Analysis-00.toc is non existent
1466 INFO: Looking for Python shared library...
1479 INFO: Using Python shared library: /Library/Frameworks/Python.framework/Versions/3.14/Python
1479 INFO: Running Analysis Analysis-00.toc
1479 INFO: Target bytecode optimization level: 0
1479 INFO: Initializing module dependency graph...
1481 INFO: Initializing module graph hook caches...
1496 INFO: Analyzing modules for base_library.zip ...
3801 INFO: Processing standard module hook 'hook-sys.py' from '/Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac'
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/imphook.py", line 422, in _load_hook_module
    self._hook_module = importlib_load_source(self.hook_module_name, self.hook_filename)
                        ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/compat.py", line 559, in importlib_load_source
    mod_loader.exec_module(mod)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "<frozen importlib._bootstrap_external>", line 762, in exec_module
  File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
  File "/Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac/hook-sys.py", line 2, in <module>
    from lazagne.softwares.browsers.chromium_browsers import chromium_based_module_location
ModuleNotFoundError: No module named 'lazagne.softwares.browsers.chromium_browsers'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.14/bin/pyinstaller", line 7, in <module>
    sys.exit(_console_script_run())
             ~~~~~~~~~~~~~~~~~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/__main__.py", line 231, in _console_script_run
    run()
    ~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/__main__.py", line 215, in run
    run_build(pyi_config, spec_file, **vars(args))
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/__main__.py", line 70, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/building/build_main.py", line 1272, in main
    build(specfile, distpath, workpath, clean_build)
    ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/building/build_main.py", line 1210, in build
    exec(code, spec_namespace)
    ~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "lazagne.spec", line 15, in <module>
    a = Analysis(['laZagne.py'],
                 pathex=[''],
    ...<8 lines>...
                 cipher=block_cipher,
                 noarchive=False)
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/building/build_main.py", line 584, in __init__
    self.__postinit__()
    ~~~~~~~~~~~~~~~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/building/datastruct.py", line 184, in __postinit__
    self.assemble()
    ~~~~~~~~~~~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/building/build_main.py", line 676, in assemble
    self.graph = initialize_modgraph(excludes=self.excludes, user_hook_dirs=self.hookspath)
                 ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 970, in initialize_modgraph
    graph = PyiModuleGraph(
        HOMEPATH,
    ...<3 lines>...
        user_hook_dirs=user_hook_dirs,
    )
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 116, in __init__
    self._analyze_base_modules()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 272, in _analyze_base_modules
    self._base_modules = [mod for req in required_mods for mod in self.import_hook(req)]
                                                                  ~~~~~~~~~~~~~~~~^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 1258, in import_hook
    target_package, target_module_partname = self._find_head_package(
                                             ~~~~~~~~~~~~~~~~~~~~~~~^
        source_package, target_module_partname, level)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 1437, in _find_head_package
    target_package = self._safe_import_module(
        target_module_headname, target_package_name, source_package)
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 539, in _safe_import_module
    return super()._safe_import_module(module_basename, module_name, parent_package)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 1818, in _safe_import_module
    self._process_imports(n)
    ~~~~~~~~~~~~~~~~~~~~~^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 2646, in _process_imports
    target_modules = self._safe_import_hook(*import_info, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 492, in _safe_import_hook
    self._find_all_excluded_imports(ret_module.identifier)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/analysis.py", line 373, in _find_all_excluded_imports
    excluded_imports.update(module_hook.excludedimports)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/imphook.py", line 343, in __getattr__
    self._load_hook_module()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/PyInstaller/depend/imphook.py", line 425, in _load_hook_module
    raise ImportErrorWhenRunningHook(self.hook_module_name, self.hook_filename)
PyInstaller.exceptions.ImportErrorWhenRunningHook: ERROR: Failed to import module __PyInstaller_hooks_0_sys required by hook for module /Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac/hook-sys.py. Please check whether module __PyInstaller_hooks_0_sys actually exists and whether the hook is compatible with your version of /Users/infinitebsod/Downloads/LaZagne-2.4.7/Mac/hook-sys.py: You might want to read more about hooks in the manual and provide a pull-request to improve PyInstaller.