Python:排除模块Pyinstaller

我已经开始在Py2Exe上使用Pyinstaller了。但是我很快就遇到了问题。如何排除我不想要的模块,以及如何查看包含在单个可执行文件中的模块? 我可以从我的Python安装中的DLL文件夹中删除一些
pyd
dll
文件,因此Pyinstaller找不到,因此不包含它们。我真的不想对所有模块这样做,因为它会变得非常艰巨。 我确实尝试编辑Pyinstaller制作的spec文件。
a.binaries - [('ssl','pydoc',)],
但是文件的大小保持不变,所以我得出的结论是没有用。 那么我如何才能看到Pyinstaller包含哪些模块以及如何排除那些我不想要的模块呢?     
已邀请:
在我使用它们时,只是总结一下这里的选项。 PyInstaller TOC是 - 正如文档所说:   TOC似乎是表单元组的列表(名称,路径,   类型代码)。实际上,它是一个有序的集合,而不是列表。 TOC包含否   重复,其中唯一性仅基于名称。 换句话说,简单地说:
a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]
因此,在您的.spec文件中 - 一旦您获得了脚本的Analysis结果 - 您就可以通过以下任一方式进一步修改相应的TOC: 对于特定文件/模块,使用差异( - )和交叉(+)操作来修改TOC。 * 对于添加/删除文件/模块列表,迭代TOC并与模式匹配代码进行比较。 (*另外,为了使差异起作用,似乎你必须明确地转换为
TOC()
并注意,因为它只是唯一定义集合元素的名称,你只需要指定 - 因此
('sqlite3', None, None)
等) 一个说明性示例(取自.spec文件)位于以下位置 - 无论好坏 - 我删除了对scipy,IPython和zmq的所有引用;删除特定的sqlite,tcl / tk和ssl .DLL;插入缺少的opencv .DLL;最后删除除matplotlib之外的所有数据文件夹... 当.pyc文件尝试加载预期的.DLL时,生成的Pyinstaller .exe是否可以正常工作是moot
:-/
# Manually remove entire packages...

a.binaries = [x for x in a.binaries if not x[0].startswith("scipy")]

a.binaries = [x for x in a.binaries if not x[0].startswith("IPython")]

a.binaries = [x for x in a.binaries if not x[0].startswith("zmq")]

# Target remove specific ones...

a.binaries = a.binaries - TOC([
 ('sqlite3.dll', None, None),
 ('tcl85.dll', None, None),
 ('tk85.dll', None, None),
 ('_sqlite3', None, None),
 ('_ssl', None, None),
 ('_tkinter', None, None)])

# Add a single missing dll...

a.binaries = a.binaries + [
  ('opencv_ffmpeg245_64.dll', 'C:\Python27\opencv_ffmpeg245_64.dll', 'BINARY')]

# Delete everything bar matplotlib data...

a.datas = [x for x in a.datas if
 os.path.dirname(x[1]).startswith("C:\Python27\Lib\site-packages\matplotlib")]
    
您可以使用Python操作Analysis类生成的列表。请注意,这些是PyInstaller的TOC格式。
a = Analysis(...)
...
# exclude anything from the Windows system dir       
a.binaries = [x for x in a.binaries if not 
              os.path.dirname(x[1]).startswith("C:\Windows\system32")]
    

要回复问题请先登录注册