pyinstaller:matplotlib 字体缓存更改为生成的应用程序中的 /var/folders

问题描述 投票:0回答:1

我正在运行 pyinstaller 3.3.dev0+gb78bfe5(在撰写本文时是最新的)并看到一些奇怪的东西:当我运行应用程序的单目录版本时,我收到一条警告,指出 matplotlib 正在重建字体缓存,但是当我直接在 python 中运行应用程序时就不会了。

通过打印 mpl.get_cachedir(),我看到 pyinstaller 构建的版本在 /var/folders/...(其基本名称每次运行都会更改)中看到缓存目录,而不是在 ~/.matplotlib 中。显然,每次路径都发生变化的缓存并不是一个非常有帮助的优化......

当我直接在 python 中运行应用程序时,缓存目录是 ~/.matplotlib。如果我删除缓存,第一次运行应用程序(直接通过 python)时,我会收到消息,然后如预期的那样在后续运行中不再收到消息。

我看到 TMPDIR (显然是自动地)设置为 /var/folders/9t/31_qw25565vdmzbtdsdlnh340000gn/T/ ,它确实是(不断变化的)缓存目录的父级。令人费解的是为什么 matplotlib 在一种情况下使用它,而在另一种情况下使用标准缓存目录。 pyinstaller 构建是否会选择不同版本的 matplotlib,或者这是一个环境变量问题?还是 pyinstaller 特有的其他东西?

FWIW,我通过 Anaconda 在 Mac OS 10.10.5 (Yosemite) 和 python 2.7.11 上运行。

python macos caching matplotlib pyinstaller
1个回答
0
投票

为了避免这种情况,您需要设置

matplotlib
config/cache 目录:

from pathlib import Path
import os
os.environ['MPLCONFIGDIR'] = str(Path.home()) + "/.matplotlib/"
import matplotlib
...

然后您的 pyinstaller 应用程序将使用标准配置位置,其中字体缓存可能已经存在,如果不存在,则仅生成一次。

与 ~8 秒相比,我的应用程序几乎立即启动,感觉很好。

另请参阅:https://stackoverflow.com/a/68589747/28290

© www.soinside.com 2019 - 2024. All rights reserved.