当前位置: 首页 > 知识库问答 >
问题:

PyInstaller与Pandas一起创建超过500 MB的exe

松雅健
2023-03-14

我尝试使用PyInstaller 3.2.1创建一个exe文件,出于测试目的,我尝试为以下代码创建一个exe:

import pandas as pd
print('hello world')

经过相当长的时间(15min+),我完成了大到620 MB的dist文件夹和150 MB的build。我在Windows上使用Python 3.5.2Anaconda定制(64位)。值得注意的是,在dist文件夹中,mkl文件几乎占用了300 MB。我使用'pyinstaller.exe foo.py'运行pyinstaller。我尝试使用--exclude-module来排除一些依赖项,但仍然得到了巨大的文件。我使用onefile还是onedir没有任何区别。

我知道exe必须包含一些重要的文件,但大到几乎1 GB是正常的吗?我可以提供警告日志,如果有必要或任何可能有助于解决问题。

共有1个答案

马宜民
2023-03-14

PyInstaller从conda包创建大的可执行文件,从pip包创建小的可执行文件。从这个简单的python代码:

from pandas import DataFrame as df
print('h')

我通过conda包获得203MB的可执行文件,通过pip包获得30MB的可执行文件。但是conda是纯Virtualenv的很好的替代者。我可以用conda和Jupyter开发,创建一些mycode.py(我可以在myfolder中下载Jupyter笔记本作为py-file)。但我的最终解决方案是:如果你没有它,安装Miniconda和从Windows开始菜单打开Anaconda提示;

    cd myfolder
    conda create -n exe python=3
    activate exe
    pip install pandas pyinstaller pypiwin32
    echo hiddenimports = ['pandas._libs.tslibs.timedeltas'] > %CONDA_PREFIX%\Lib\site-packages\PyInstaller\hooks\hook-pandas.py
    pyinstaller -F mycode.py

在我创建新环境'exe',pypiwin32需要pyinstaller但没有自动安装,hook-pandas.py需要用pandas编译。此外,导入子模块不能帮助我优化可执行文件的大小。所以我不需要这个东西:

from pandas import DataFrame as df
import pandas as pd
 类似资料:
  • 问题内容: 我尝试使用PyInstaller 3.2.1创建exe文件,出于测试目的,我尝试为以下代码制作exe文件: 经过相当长的时间(15分钟以上)后,我完成了620 MB的dist文件夹并构建了150 MB。我在Windows上使用Python 3.5.2 | Anaconda自定义(64位)。可能值得注意的是,在dist文件夹中,mkl文件负责将近300 MB。我使用’pyinstalle

  • 问题内容: 我问了一个有关自定义窗口小部件的问题,但对我是否需要它以及应该如何进行感到困惑。 我目前有这堂课 目前,这在两点之间画了一条边,但是现在我希望同时创建成本标签。 我已经添加了用于拖动节点和边的处理,那么创建标签的最佳方法是什么 我需要为此制作一个自定义窗口小部件吗?谁能解释一下,假设是通过从JComponent扩展来制作一个组件,那么我将通过g.mixed()来调用它,其中新的小部件是

  • 我创建了一个小应用程序来下载youtube视频,并将它们添加到我的音乐文件夹中,这样我就可以通过spotify收听它们。只要我通过IDE运行该应用程序,它就可以正常工作。我创建了一个。exe文件通过pyinstaller,但它在启动时崩溃,我尝试以管理员身份运行它,也尝试按照其他线程中的建议通过cmd运行它,但没有任何效果。 我使用以下方法创建了它: 这是python代码: 这是我得到的,我试图通

  • 我知道pandas的设计目的是加载完全填充的,但我需要创建一个空的DataFrame,然后逐个添加行。做这件事最好的方法是什么? 我成功创建了一个空DataFrame,其中包含: 然后我可以添加一个新行,并用以下内容填充字段: 它可以工作,但看起来很奇怪:-/(它不能添加字符串值) 我如何添加一个新的行到我的数据帧(不同的列类型)?

  • 问题内容: 所以我创建了这两个类 现在这是两者的简化版本,但足以说明我的问题。此处显示的类将无法使用,因为找不到四分之一类。为了使其工作,我可以将$ class变量更改为 所以我的问题是:当两个类已经是同一个命名空间的成员时,为什么需要在这里使用命名空间。仅当我将类名放入变量中时,才需要名称空间: 可以正常工作。为什么会这样?在这里有什么需要避免的潜在陷阱吗? 问题答案: 因为可以将字符串从一个名

  • 我想创建一个用PDF-AS填充的ZipOutputStream。我使用的是iText(5.5.7版)。对于超过1000个pdf条目,我在doc.close()上得到一个OutOfMemory-exception并且找不到泄漏。 PDFBuilder 有什么建议我该怎么修复它?我是不是忘了什么?我已经尝试过使用java ZipOutputStream,但它有任何区别。 Thx为你的答案!我理解Byt