2016-12-25 4 views
5

Я пытаюсь использовать PyInstaller для создания автономного приложения OSX, которое запускает графический интерфейс, который я создал. Когда я ввожу следующее в моем терминале:Ошибка при использовании PyInstaller

pyinstaller gui.py 

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

File "/Users/username/anaconda/bin/PyInstaller", line 11, in <module> 
    sys.exit(run()) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/__main__.py", line 90, in run 
run_build(pyi_config, spec_file, **vars(args)) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/__main__.py", line 46, in run_build 
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 788, in main 
build(specfile, kw.get('distpath'), kw.get('workpath'), 
kw.get('clean_build')) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 734, in build 
exec(text, spec_namespace) 
File "<string>", line 16, in <module> 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 212, in __init__ 
self.__postinit__() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/datastruct.py", line 178, in __postinit__ 
self.assemble() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 470, in assemble 
module_hook.post_graph() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/imphook.py", line 409, in post_graph 
self._load_hook_module() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/imphook.py", line 376, in 
_load_hook_module 
self.hook_module_name, self.hook_filename) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/hooks/hook-PyQt4.py", line 33, in <module> 
(qt_menu_nib_dir('PyQt4'), ''), 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/utils/hooks/qt.py", line 125, in qt_menu_nib_dir 
""".format(namespace, path)) 

Exception: 
      Cannot find qt_menu.nib for PyQt4 
      Path checked: 
    /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/qt_menu.nib 

Что кажется странным, так как мое имя не Фелипе!

У меня есть несколько вопросов:

1) Как это возможно, что есть каталог под названием Felipe на моем компьютере? (Я использовал anaconda для установки qt, я не знаю, имеет ли это к этому какое-то отношение?)

2) До получения сообщения об ошибке PyInstaller ищет нужную папку. Почему он начинает искать в этом неопределенном (туманном для меня, что есть) каталоге, о котором я не знаю?

3) Я довольно новичок в отношении каталогов, и я не могу найти господина Фелипе где-нибудь на своем компьютере. Когда я смотрю в папку «Пользователи», я просто вижу своего пользователя и пустую папку «Shared». (Я не знаю, для чего используется общая папка и почему она есть.)

4) Основываясь на том, что я читал в Интернете, я скопировал qt_menu-nib в папку, где должен быть повернут сценарий в автономный. Что я должен сделать, чтобы успешно создать автономный отсюда?

+0

Мне очень жаль, но я не думаю, что я полностью понимаю вашу точку. Что вы имеете в виду, когда говорите, что pyinstaller должен сначала установить требования к ОС? – titusAdam

+0

Не могли бы вы просто быть ясными и дать полный ответ? Я понятия не имею, о чем вы говорите. Я не эксперт, как я упоминал в своем вопросе! – titusAdam

+1

также замечает путаницу 'anaconda' vs' miniconda' - либо где-то есть плохая символическая ссылка (например, '/ Users/username/anaconda ->/Users/felipe/minoconda'), либо ваша установка pyQt была« скомпилирована », на каком-то другом компьютере (установленном как колесо), и этот путь компьютера был перенесен. В последнем случае попробуйте «установить install -no-cache-dir/- no-wheel/- force-reinstall /' pyqt с нуля. –

ответ

4

Прежде всего, вы столкнулись с известной проблемой между PyInstaller и Anaconda: PyInstaller issue #2135. В разговоре содержатся ответы на ваши вопросы.

1) Путь жестко закодирован в ошибочно построенном двоичном коде Qt, который предоставляется Anaconda, см. comment from mrady3.

2) PyInstaller загружает Qt4-specific hook, чтобы найти ресурсы (qt_menu.nib), необходимые для запуска целевого приложения. Код hook пытается получить местоположение каталога ресурсов из самого Qt-бина. Qt возвращает неверный/hardcoded/path, и после этого процесс завершается с ошибкой.

3) См. Пункт 1), это была папка на машине сопровождающего. Qt предполагает, что его путь установки предварительно установлен до сборки; Репозиторий Anaconda содержит двоичный файл, который был скомпилирован с учетом другого пути установки.

4) Там может быть несколько возможных подходов:

Try установки версии разработчик PyInstaller из источников, он имеет some fixes for the above-mentioned issue. Затем повторите попытку построения приложения:

git clone https://github.com/pyinstaller/pyinstaller.git 
cd pyinstaller 
/Users/username/anaconda/bin/python setup.py sdist 
conda install dist/PyInstaller-3.3.dev0.tar.bz2 

Установка Qt4 с помощью homebrew. Локальная компиляция займет много времени:

brew install cartr/qt4/qt 
find /usr/local/Cellar/qt -name qt_menu.nib 

Редактировать Qt4 крючок /Users/username/anaconda/lib/python2.7/site- packages/PyInstaller/hooks/hook-PyQt4.py и заменить вызов qt_menu_nib_dir('PyQt4') с путем от доморощенной установки ('/usr/local/Cellar/qt/4.8.7_3/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib').

Или же, просто положить qt_menu.nib в ожидаемом месте:

sudo mkdir -p /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/ 
sudo ln -s /usr/local/Cellar/qt/4.8.7_3/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/