Python:排除模块 Pyinstaller

标签 python pyinstaller

我已经开始使用 Pyinstaller 而不是 Py2Exe。但是我很快就遇到了一个问题。如何排除不需要的模块,以及如何查看包含在单个可执行文件中的模块?

我可以从我的 Python 安装的 DLL 文件夹中删除一些 pyddll 文件,这样 Pyinstaller 就找不到,因此不会包含它们。我真的不想对所有模块都这样做,因为它会变得非常艰巨。

我确实尝试编辑 Pyinstaller 生成的规范文件。

a.binaries - [('ssl','pydoc',)],

但文件的大小保持不变,所以我认为这不起作用。

那么我如何才能看到 Pyinstaller 包含哪些模块以及如何排除那些我不想要的模块呢?

最佳答案

只是在我使用它们时总结这里的选项。

PyInstaller TOC - 如文档所述:

A TOC appears to be a list of tuples of the form (name, path, typecode). In fact, it's an ordered set, not a list. A TOC contains no duplicates, where uniqueness is based on name only.

换句话说,简单地说:

a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]

因此,在您的 .spec 文件中 - 一旦您获得了脚本的分析结果 - 您就可以通过以下任一方式进一步修改相应的 TOC:

  • 对于特定文件/模块,使用差分 (-) 和交集 (+) 操作来修改目录。 *

  • 要添加/删除文件/模块的列表,请迭代 TOC 并与模式匹配代码进行比较。

(* 顺便说一句,为了使差异起作用,您似乎必须显式转换为 TOC() 并注意,因为它只是唯一定义集合元素的名称,所以您只需要指定 - 因此 ('sqlite3', None, None) etc.)

下面是一个说明性示例(取自 .spec 文件),无论好坏,我删除了对 scipy、IPython 和 zmq 的所有引用;删除特定的 sqlite、tcl/tk 和 ssl .DLL;插入缺失的 opencv .DLL;最后删除除 matplotlib 之外的所有数据文件夹...

当 .pyc 文件尝试加载预期的 .DLL 时,生成的 Pyinstaller .exe 是否会正常工作:-/

# 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:排除模块 Pyinstaller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4890159/

相关文章:

python - 由于数组大小的微小差异,创建 numpy.zeros 的时间差异很大

python - 如何使用我在代码中使用的所有包将 myfile.py 编译为 myfile.exe?

python - 尝试使用 Pyinstaller 构建 Python 可执行文件时,找不到现有的 scipy 模块

Python获取多个逗号后面的字符串

python - 单击按钮的代码可以运行一次,但不能运行两次

python - 用 Python 向 LMDB 写入数据非常慢

python-3.x - 使用 Pyinstaller 制作 .exe 后 Pygame 未加载 png

linux - 在 Linux 中使用多进程模块时,pyinstaller 不创建工作可执行文件

runtime-error - .PYZ 文件扩展名

python - 使用 Python 执行 vBulletin-Forum 登录