Python 使用PyInstaller时出错

Python 使用PyInstaller时出错,python,macos,terminal,pyinstaller,Python,Macos,Terminal,Pyinstaller,我正在尝试使用PyInstaller创建一个独立的OSX应用程序,它运行我制作的GUI。当我在终端中输入以下内容时: pyinstaller gui.py 在出现以下错误之前,一切似乎都正常: File "/Users/username/anaconda/bin/PyInstaller", line 11, in <module> sys.exit(run()) File "/Users/username/anaconda/lib/python2.7/site- packa

我正在尝试使用PyInstaller创建一个独立的OSX应用程序,它运行我制作的GUI。当我在终端中输入以下内容时:

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
文件“/Users/username/anaconda/bin/PyInstaller”,第11行,在
sys.exit(run())
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/_main__.py”,第90行,运行中
运行构建(pyi\u配置,规范文件,**vars(args))
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/_main__.py”,第46行,运行版本
PyInstaller.building.build\u main.main(pyi\u配置,spec\u文件,**kwargs)
文件“/Users/username/anaconda/lib/python2.7/site-
主目录中的第788行“packages/PyInstaller/building/build_main.py”
构建(specfile,kw.get('distpath'),kw.get('workpath'),
kw.get(‘清洁建筑’)
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/building/build_main.py”,第734行,内置
exec(文本,规范名称空间)
文件“”,第16行,在
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/building/build_main.py”,第212行,in__init__
self.\uuuu postinit\uuuuu()
文件“/Users/username/anaconda/lib/python2.7/site-
文件包/PyInstaller/building/datastruct.py”,第178行,在__
self.assembly()
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/building/build_main.py”,第470行,汇编
模块\u hook.post\u图()
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/building/imphook.py”,第409行,在post_图中
自。\加载\挂钩\模块()
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/building/imphook.py”,第376行,in
_装载钩模块
self.hook\u模块名称、self.hook\u文件名)
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/hooks/hook-PyQt4.py”,第33行,in
(qt_菜单_nib_dir('PyQt4'),“”),
文件“/Users/username/anaconda/lib/python2.7/site-
packages/PyInstaller/utils/hooks/qt.py”,qt_菜单_nib_dir中的第125行
“”。格式(命名空间、路径))
例外情况:
找不到PyQt4的qt_menu.nib
检查的路径:
/Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/qt_menu.nib
这似乎很奇怪,因为我的名字不是菲利佩

我有几个问题:

1) 我的计算机上怎么可能有一个名为felipe的目录?(我用anaconda安装了qt,我不知道这是否与此有关?)

2) 在我收到错误消息之前,PyInstaller正在查找正确的文件夹。为什么它开始查找这个我不知道的模糊目录

3) 关于目录我是一个新手,我在我的电脑上任何地方都找不到felipe先生。当我查看用户文件夹时,我只看到我自己的用户和一个空的“共享”文件夹。(我不知道共享文件夹用于什么以及它为什么在那里。)


4) 根据我在internet上读到的内容,我将qt_menu-nib复制到了应该转换为独立脚本的脚本所在的文件夹中。要从这里成功创建独立脚本,我应该做些什么?

首先,您面临PyInstaller和Anaconda之间的一个已知问题:。对话包含了您的问题的答案问题

1) 路径在Anaconda提供的错误构建的Qt二进制文件中硬编码,请参阅

2) PyInstaller加载以查找运行目标应用程序所需的资源(
qt_menu.nib
)。钩子代码尝试从qt二进制文件本身获取资源目录的位置。qt二进制文件返回错误的/硬编码的/路径,然后该过程失败

3) 请参见第1点),它是维护者机器上的一个文件夹。Qt假定其安装路径在构建之前已预先设置;Anaconda存储库承载一个二进制文件,该二进制文件是在考虑其他安装路径的情况下编译的

4) 有几种可能的方法:

请尝试从源代码处安装PyInstaller的开发人员版本,它已安装。然后再次尝试构建应用程序:

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。本地编译将花费很长时间:

brew install cartr/qt4/qt
find /usr/local/Cellar/qt -name qt_menu.nib
/Users/username/anaconda/lib/python2.7/site处编辑Qt4钩子-
packages/PyInstaller/hooks/hook-PyQt4.py
并将对
qt_menu\u nib_dir('PyQt4')
的调用替换为来自自制安装的路径(
'/usr/local/cillar/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/

很抱歉,我不认为我完全理解你的观点。当你说pyinstaller需要首先设置我的操作系统要求时,你是什么意思?你能说清楚并给出一个完整的答案吗?我不知道你在说什么。正如我在问题中提到的,我不是专家!同时请注意一个困惑
anaconda
vs
miniconda
--可能是某个地方有一个错误的符号链接(例如,
/Users/username/anaconda-->/Users/felipe/minoconda
),或者您的pyQt安装是在其他计算机上“编译”的(安装为轮子)在后一种情况下,尝试
pip安装--no cache dir/--no wheel/--强制重新安装/
pyqt。