pyinstaller / pyinstaller/pyinstaller

Portaudio Bundled but location is my local install?

Open
#7,816 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

triage
Dominant language
Python
Stars
13.1k
Forks
2k
Avg merge
1d 3h
Merged PRs (30d)
11

Description

Hi, my code works, and bundling works.

However when I add the need for portaudio in my code it appears that the hook runs and loads the correct bundles into the onefile locations, but when running the application it looks for the portaudio in another location (my local install).

To be clear:
Console error:

Library Validation failed: Rejecting '/opt/homebrew/Cellar/portaudio/19.7.0/lib/libportaudio.2.dylib' (Team ID: none, platform: no) for process 'pypy(12758)' (Team ID: N12B3X14HN, platform: no), reason: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)

The issue is NOT codesigning, I manually sign everything fine, the issue is that it is attempting to load a local copy of portaudio and NOT the one bundled (which is signed).

Any idea what to do or how to track down? I looked in warn log but didn't see this mentioned.

My spec is pretty standard, thanks for any help!:

block_cipher = None


a = Analysis(
    ['pypy.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='pypy',
    debug=1,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity='Developer ID...',
    entitlements_file='',
    icon=['icons/pypy.png'],
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='pypy',
)
app = BUNDLE(
    coll,
    name='[pypy.app](http://pypy.app/)',
    icon='./icons/pypy.png',
    bundle_identifier='com.me.pypy',
    info_plist={
        "NSHighResolutionCapable":True,
        "com.apple.security.automation.apple-events":True,
        "NSMicrophoneUsageDescription":"This will be used to analyze slurring",
        "com.apple.security.device.microphone":True,
        "com.apple.security.device.audio-input":True
    }
)

Operating System: OSX (13.3.1)
python installed with brew
pyinstaller version: 5.13.0

I have been working on this for a while, just found: https://stackoverflow.com/questions/69811814/how-to-include-portaudio-into-a-pyinstaller-onefile-build

Where he mentions there seems to be an issue with linking, is this the same issue, is there a solution we can include in pyinstaller?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the supplied PyInstaller spec and the macOS 13.3.1 reproduction, then compare the bundled locations with the path reported in the console error. Check the warn log and the linked Stack Overflow discussion for clues about how portaudio is resolved. Done means identifying why the local portaudio copy is selected and determining whether PyInstaller needs a fix or documented workaround.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, python
Domain
build-system
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.