检查pyinstaller冻结应用程序

时间:2016-11-17 04:29:55

标签: python pyinstaller inspect

我写了一个文件pwrapper.py,它导入了我写的packageapi的另一个包。 packageapi在以下指令中使用inspect模块

print (inspect.getouterframes(inspect.currentframe())[1])

我使用pyinstaller冻结了pwrapper.py。

当我从命令行启动pwrapper.exe时,一切正常。我得到了输出

<frame object at 0x01234567> pwrapper.py 19 new_table ['    packageapi.function()'] 0

但是,当我通过双击启动pwrapper.exe时,我得到以下输出

<frame object at 0x01234567> pwrapper.py 19 new_table None None

当我双击exe时,为什么当控件从pwrapper传递给packageapi.function时框架是否包含行和索引?我发现从命令行运行exe时它表现得很好很奇怪。显然有一些我不明白的东西。有人可以帮我修复它。

非常感谢你!

2 个答案:

答案 0 :(得分:0)

我得到了它的工作。事实证明,我必须将所有源代码复制到相同的目录结构中,但要复制到builds文件夹中,它现在可以正常工作。我希望pyinstaller会这样做,如果这是必须的!

答案 1 :(得分:0)

使用带有一些添加行的预构建.spec文件运行pyinstaller可以在构建exe时自动复制源代码。

没有.spec文件?
通过pyinstaller运行.py文件将自动创建.spec文件。
如果您不想处理所有内容并只是制作.spec文件,请运行此 -

pyi-makespec pwrapper.py

然后修改.spec文件,类似于此(Windows示例) -

addedFiles = {
            ('README.md','.'),
            ('folder\\specific.file','folder\\.'),
            ('folder2\\subFolder\\*.ext','folder2\\subFolder\\.'),
            ('fullFolder\\*','fullFolder\\.'),
            }
a = Analysis([...]
             datas=addedFiles ,
             [...])

然后运行pyinstaller,将其指向.spec文件而不是.py文件

pyinstaller pwrapper.spec

您可以在此处查看我使用此方法的示例 - pxlViewer.spec