我正在尝试使用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/

10-15 03:26