-
-
Save Kvnbbg/84871ae4d642c2dd896e0423471b1b52 to your computer and use it in GitHub Desktop.
Two steps to turn a Python file to a macOS installer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# References | |
# https://www.pythonguis.com/tutorials/packaging-pyqt5-applications-pyinstaller-macos-dmg/ | |
# https://medium.com/@jackhuang.wz/in-just-two-steps-you-can-turn-a-python-script-into-a-macos-application-installer-6e21bce2ee71 | |
# --------------------------------------- | |
# Clean up previous builds | |
# --------------------------------------- | |
echo "Cleaning up previous builds..." | |
rm -rf build dist/* | |
# --------------------------------------- | |
# Step 1: Convert Python script to an application bundle | |
# --------------------------------------- | |
echo "Converting Python script to macOS app bundle..." | |
# The following command will create a standalone .app from your Python script | |
pyinstaller --name 'CryptoSafePDF' \ | |
--icon 'CryptoSafePDF.ico' \ | |
--windowed \ | |
--add-data='./strong_beat.wav:.' \ | |
--add-data='./sub_strong_beat.wav:.' \ | |
--add-data='./weak_beat.wav:.' \ | |
main.py | |
# --------------------------------------- | |
# Step 2: Convert the application bundle to a DMG (macOS disk image) | |
# --------------------------------------- | |
echo "Creating DMG installer..." | |
# Prepare the folder for DMG creation | |
mkdir -p dist/dmg | |
rm -rf dist/dmg/* | |
cp -r "dist/CryptoSafePDF.app" dist/dmg | |
# Create the DMG | |
# Ensure you have 'create-dmg' installed. If not, install using 'brew install create-dmg' | |
create-dmg \ | |
--volname "CryptoSafePDF" \ | |
--volicon "CryptoSafePDF.ico" \ | |
--window-pos 200 120 \ | |
--window-size 600 300 \ | |
--icon-size 100 \ | |
--icon "CryptoSafePDF.app" 175 120 \ | |
--hide-extension "CryptoSafePDF.app" \ | |
--app-drop-link 425 120 \ | |
"dist/CryptoSafePDF.dmg" \ | |
"dist/dmg/" | |
echo "Packaging complete. You can find the DMG installer in the dist/ directory." |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# CryptoSafePDF Setup and Packaging Script for macOS | |
# 1. Install Homebrew (if not installed) | |
if ! command -v brew &>/dev/null; then | |
echo "Installing Homebrew..." | |
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | |
else | |
echo "Homebrew already installed." | |
fi | |
# 2. Install create-dmg | |
if ! brew list create-dmg &>/dev/null; then | |
echo "Installing create-dmg..." | |
brew install create-dmg | |
else | |
echo "create-dmg already installed." | |
fi | |
# 3. Install pyinstaller | |
if ! pip list | grep pyinstaller &>/dev/null; then | |
echo "Installing pyinstaller..." | |
pip install pyinstaller | |
else | |
echo "pyinstaller already installed." | |
fi | |
# 4. Clean up previous builds | |
echo "Cleaning up previous builds..." | |
rm -rf build dist/* | |
# 5. Convert Python script to an application bundle | |
echo "Converting Python script to macOS app bundle..." | |
pyinstaller --name 'CryptoSafePDF' \ | |
--icon 'CryptoSafePDF.ico' \ | |
--windowed \ | |
--add-data='./strong_beat.wav:.' \ | |
--add-data='./sub_strong_beat.wav:.' \ | |
--add-data='./weak_beat.wav:.' \ | |
main.py | |
# 6. Create the DMG installer | |
echo "Creating DMG installer..." | |
mkdir -p dist/dmg | |
rm -rf dist/dmg/* | |
cp -r "dist/CryptoSafePDF.app" dist/dmg | |
create-dmg \ | |
--volname "CryptoSafePDF" \ | |
--volicon "CryptoSafePDF.ico" \ | |
--window-pos 200 120 \ | |
--window-size 600 300 \ | |
--icon-size 100 \ | |
--icon "CryptoSafePDF.app" 175 120 \ | |
--hide-extension "CryptoSafePDF.app" \ | |
--app-drop-link 425 120 \ | |
"dist/CryptoSafePDF.dmg" \ | |
"dist/dmg/" | |
echo "Packaging complete. You can find the DMG installer in the dist/ directory." | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To call and run
installer.py
frommain.py
, you can use one of the following methods:Using the
exec
Function:This method allows you to execute a string as Python code. It's a straightforward way to run another Python script from within a script.
Using the
subprocess
Module:This method runs the script as a separate process. It's more versatile and allows for better control over the execution, capturing output, and error handling.
Note: Replace
python
withpython3
if that's the command you use to run Python scripts on your system.Importing as a Module:
If
installer.py
is structured in a way that allows it to be imported (i.e., it doesn't execute code when imported), you can simply import it and call its functions.For this to work without modifications, you'd typically structure
installer.py
with a main guard:Then, in
main.py
, you can call themain()
function ofinstaller.py
: