我正在尝试使用PyInstaller创建一个运行我制作的GUI的独立OSX应用程序。当我在终端中输入以下内容时:
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
似乎很奇怪,因为我的名字不是felipe!
我有一些问题:
1)我的计算机上怎么可能有一个名为felipe的目录? (我用anaconda安装了qt,我不知道这是否与它有关?)
2)直到收到错误消息,PyInstaller才在正确的文件夹中寻找。为什么它开始在我不知道的这个模糊(对我来说是模糊的)目录中查找?
3)我是一个关于目录的新手,我在计算机上的任何地方都找不到费利佩先生。当我查看“用户”文件夹时,我只会看到我自己的用户和一个空的“共享”文件夹。 (我不知道共享文件夹用于什么以及为什么在那里。)
4)根据我在互联网上所读到的内容,我将qt_menu-nib复制到了本应被转换为独立脚本的文件夹中。为了成功从此处创建独立服务器,我该怎么办?
最佳答案
首先,您会在PyInstaller和Anaconda之间遇到一个已知问题:PyInstaller issue #2135。对话包含您问题的答案。
1)该路径在Anaconda提供的错误构建的Qt二进制文件中进行了硬编码,请参阅comment from mrady3。
2)PyInstaller加载Qt4-specific hook以便查找运行目标应用程序所需的资源(qt_menu.nib
)。 Hook 代码尝试从Qt二进制文件本身获取资源目录的位置。 Qt二进制返回错误的/hardcoded/路径,然后该过程失败。
3)参见要点1),它是维护者机器上的文件夹。 Qt假定其安装路径是在构建之前预先设置的。 Anaconda存储库托管一个二进制文件,该二进制文件是在考虑其他安装路径的情况下编译的。
4)可能有几种可能的方法:
尝试从源代码安装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
使用homebrew安装Qt4。本地编译将花费很长时间:
brew install cartr/qt4/qt
find /usr/local/Cellar/qt -name qt_menu.nib
在
/Users/username/anaconda/lib/python2.7/site-packages/PyInstaller/hooks/hook-PyQt4.py
上编辑Qt4钩子(Hook),并将对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/
关于python - 使用PyInstaller时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41322636/