77 lines
1.7 KiB
Bash
Executable File
77 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
echo "🔨 Building pyhdwallet standalone binary..."
|
|
|
|
# Check venv more strictly
|
|
if [ -z "$VIRTUAL_ENV" ] || [[ "$VIRTUAL_ENV" != *"hdwalletpy"* ]]; then
|
|
echo "❌ Not in virtual environment!"
|
|
echo ""
|
|
echo "Activate it first:"
|
|
echo " source .venv/bin/activate"
|
|
exit 1
|
|
fi
|
|
|
|
# Install PyInstaller if needed
|
|
if ! pip show pyinstaller &>/dev/null; then
|
|
echo "📦 Installing PyInstaller..."
|
|
pip install pyinstaller
|
|
fi
|
|
|
|
# Create patched version for frozen builds
|
|
echo "📝 Creating frozen-compatible version..."
|
|
python3 << 'PATCH'
|
|
with open('src/pyhdwallet.py', 'r') as f:
|
|
content = f.read()
|
|
|
|
# Patch _require() for PyInstaller
|
|
content = content.replace(
|
|
"""def _require(mod: str, pkg: str) -> None:
|
|
try:
|
|
__import__(mod)""",
|
|
"""def _require(mod: str, pkg: str) -> None:
|
|
# Skip check in PyInstaller frozen executable
|
|
if getattr(sys, 'frozen', False):
|
|
return
|
|
try:
|
|
__import__(mod)"""
|
|
)
|
|
|
|
with open('src/pyhdwallet_frozen.py', 'w') as f:
|
|
f.write(content)
|
|
PATCH
|
|
|
|
# Clean previous builds
|
|
rm -rf build/ dist/ *.spec
|
|
|
|
# Build
|
|
echo "🔧 Building with PyInstaller..."
|
|
pyinstaller --onefile \
|
|
--name pyhdwallet \
|
|
--clean \
|
|
--collect-all bip_utils \
|
|
--collect-all pgpy \
|
|
--collect-all nacl \
|
|
--collect-all pyzipper \
|
|
--collect-all coincurve \
|
|
--copy-metadata coincurve \
|
|
src/pyhdwallet_frozen.py
|
|
|
|
# Clean up temp file
|
|
rm src/pyhdwallet_frozen.py
|
|
|
|
# Test
|
|
echo ""
|
|
echo "✅ Testing binary..."
|
|
./dist/pyhdwallet test
|
|
|
|
# Show results
|
|
echo ""
|
|
echo "🎉 Binary created successfully!"
|
|
echo " Location: dist/pyhdwallet"
|
|
echo " Size: $(du -h dist/pyhdwallet | cut -f1)"
|
|
echo ""
|
|
echo "Quick test:"
|
|
echo " ./dist/pyhdwallet gen --help"
|
|
echo " ./dist/pyhdwallet gen-child --help"
|