Precompiled version for Mac OS X ("universal2") / Instructions for "PyInstaller" on Mac OS X?
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.742318868637085I 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.5076510906219482Installed 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.49904680252075195So 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.Source: AlessandroZ/LaZagne