2016-09-07 4 views
2

Я использую Python 3 из дистрибутива Anaconda и пытаюсь преобразовать простую программу python в приложение OS X (работает на El Capitan). Следуя инструкции в the tutorial, я побежалКак использовать py2app с python Anaconda?

py2applet --make-setup my-script.py 
python setup.py py2app -A 

Все побежали отлично без ошибок, но когда я пытаюсь запустить приложение, я получаю сообщение об ошибке:

my-script: A python runtime not could (sic) be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this applications Info.plist file.

Я понял, что это значит, что я должен добавить путь к python Anaconda (который находится в моем bash PATH, но неизвестен для запуска). Тем не менее, приложение, автоматически сгенерированные Info.plist уже указывает на питона двоичном Anaconda:

<key>PythonInfoDict</key> 
<dict> 
    <key>PythonExecutable</key> 
    <string>/Applications/Experimental/anaconda/bin/python</string> 
    ... 

Я не вижу, что там исправить здесь. Я прочитал эти вопросы, связанные с:

Первый вопрос предполагает то же самое сообщение об ошибке, и будет решена, следуя советам во втором вопросе. Но, как я понимаю, эти вопросы описывают противоположную ситуацию: OP работал под управлением python, распределенной с ОС, и хотел распространять свое приложение; решение заключается в использовании отдельно установленного python. I am с использованием несистемного питона, и я еще не пытаюсь распространять что-либо. Итак, что вызывает здесь проблемы, и каково решение?

+0

Вы пытались запустить приложение, не используя опцию псевдонима (например, 'python setup.py py2app'), или' open -a dist/MyApplication.app'? –

+1

Полезное предложение! 'open -a dist/my-script.app' завершается с ошибкой (« Не удается найти приложение с именем «dist/my-open.app»), но попытка полной сборки приложения (по-прежнему не работает) вычеркнула проблему : DLL 'libpython' не называется как ожидается py2app. Я смог исправить это, отредактировав созданный 'Info.plist'. – alexis

ответ

1

Предложение от @ l'L'l позволило мне определить проблему: пока не было ошибок при создании моего приложения в «режиме псевдонима» (используя символические ссылки на среду вместо копирования двоичных файлов), создание приложения без псевдонима вымыл ошибку: py2app ищет DLL libpython под несуществующим именем /Applications/anaconda/lib/libpython3.4.dylib.

Быстрая проверка показала, что Anaconda предоставляет эту DLL под немного иным именем: libpython3.4m.dylib. Хотя исправление dist/my-script.app/Contents/Info.plist устраняет проблему, решение right предназначено для редактирования setup.py, так что будущие сборки будут работать правильно. С помощью py2app documentation, я соединил следующее (частичное содержание setup.py показано ниже):

OPTIONS = {'argv_emulation': True, 
      'plist': { 
       'PyRuntimeLocations': [ 
       '@executable_path/../Frameworks/libpython3.4m.dylib', 
       '/Applications/anaconda/lib/libpython3.4m.dylib' 
       ] 
      }} 

setup(
    app=APP, 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS}, 
    setup_requires=['py2app'], 
) 

Пути приходит от генерируемого Info.plist; Я только изменил абсолютный путь, рассуждая, что если я когда-либо предоставил локальную DLL по относительному пути, у него будет имя по умолчанию.

+0

Как вы нашли эти библиотеки DLL? У меня такая же проблема, и я попытался включить одну DLL, которую я мог найти в PyRuntimeLocations: /Users/***/anaconda/lib/libpython3.5m.dylib. Однако, похоже, это не имеет никакого значения. На самом деле я попытался включить /Users/***/anaconda/lib/nonsense.dylib, и ничего не изменилось, ошибка не была выброшена. –

+0

Я просто 'cd''d в каталог, который содержал бы файл' py2app', который пытался включить, и проверил, что еще есть. Но вы также можете попробовать 'mdfind-name libpython' (если вы находитесь на OS X, иначе это' locate' или 'slocate', я думаю). Но вы говорите, что на самом деле вы не видели ошибку, которую я описываю в своем ответе? Вы пытались построить в режиме без псевдонима? Если вы это сделали, и вы не получите сообщение об ошибке, у вас, вероятно, будет другая проблема. – alexis

+0

Чтобы уточнить: я получаю ту же ошибку, что и у вас, и создаю в режиме без псевдонима. py2app также дает это сообщение об ошибке при компиляции: 'ValueError: '/Users/***/anaconda/lib/libpython3.5.dylib' не существует' Но py2app дает мне такую ​​же ошибку, независимо от того, что я положил в plist ', то есть: '{' PyRuntimeLocations ': ['/Users/****/anaconda/lib/nonsense.dylib ']}'. И затем дает мне ошибку «отредактируйте PyRuntimeLocations», когда я пытаюсь ее открыть. Таким образом, похоже, что на самом деле не используется PyRuntimeLocations. Мне было интересно, как вы на самом деле работаете с PyRuntimeLocations. –

 Смежные вопросы

  • Нет связанных вопросов^_^