2013-07-15 3 views
2

Python 2에서 py2app로 작업 중이며, 내 app이 컴파일 된 .app 파일의 일부로 실행되는지 또는 독립 실행 형 스크립트로 실행되는지 여부를 코드에서 감지 할 수 있는지 궁금합니다.Python : .app 번들 내에서 실행 중인지 확인하십시오.

일부 코드가 .dylib 파일을 동적으로로드하기 때문에 이는 중요합니다. 기본적으로 스크립트로 실행될 때이 코드는 정상적으로 실행됩니다.

Traceback (most recent call last): 
    File ".../python/game/dist/main.app/Contents/Resources/__boot__.py", line 316, in <module> 
    _run() 
    File ".../python/game/dist/main.app/Contents/Resources/__boot__.py", line 311, in _run 
    exec(compile(source, path, 'exec'), globals(), globals()) 
    File ".../python/game/dist/main.app/Contents/Resources/main.py", line 1, in <module> 
    import game 
    File "game.pyc", line 10, in <module> 
    File "gui.pyc", line 5, in <module> 
    File "audio/__init__.pyc", line 2, in <module> 
    File "audio/pybass.pyc", line 65, in <module> 
    File "ctypes/__init__.pyc", line 365, in __init__ 
OSError: dlopen(...python/game/dist/main.app/Contents/Resources/lib/python2.7/site-packages.zip/audio/libbass.dylib, 6): no suitable image found. Did find: 
    .../python/game/dist/main.app/Contents/Resources/lib/python2.7/site-packages.zip/audio/libbass.dylib: stat() failed with errno=20 
2013-07-15 02:50:21.146 main[10040:707] main Error 

내가 동적으로 다음, 라이브러리의 외부와 자원에 .dylib 파일을 이동에서로드하는 것입니다 가장 좋은 방법을 생각하고 다음 .APP 내에서 실행하는 경우 그러나, 내가 좋아하는 뭔가를 얻을 거기에 -하지만 이렇게하려면 내가 .app에서 실행 중인지 여부를 코드에서 감지해야합니다. 그렇다면 라이브러리의 다른 위치 (즉, 앱 번들의 Resources 폴더)를 확인하십시오

감사합니다.

답변

2

Py2app는 sys.frozen을 "macosx_app"(응용 프로그램 번들 용)로 설정합니다. 사이트 - 패키지에 추가하는 대신

setup(
    ... 
    options={ 
    'py2app': { 
     'packages': ['audio'], 
     } 
    } 
) 

이 디렉토리로 응용 프로그램 번들의 전체 "오디오"패키지를 포함

문제를 피하는 방법은 "패키지"옵션을 사용하는 것입니다 압축 파일. 그렇게하면 응용 프로그램 번들에 있는지 여부를 감지 할 필요가 없습니다.

관련 문제