用cxFreeze导入matplotlib.pyplot和BeautifulSoup

5 投票
1 回答
2569 浏览
提问于 2025-04-17 21:23

我正在尝试使用cxFreeze为我的Python脚本编译一个可执行文件。在我需要导入的许多库中,有两个在使用cxFreeze时似乎出现了问题。具体来说,看看下面这个test.py脚本:

print('matplotlib.pyplot')
import matplotlib.pyplot

用cxFreeze编译并运行后,出现了以下输出:

matplotlib cxFreeze问题

另外,下面这个test.py脚本:

print('BeautifulSoup from bs4')
from bs4 import BeautifulSoup

在用cxFreeze编译后,产生了以下输出: BeautifulSoup cxFreeze问题

我的cxFreeze的setup.py文件如下:

import sys
from cx_Freeze import setup, Executable

setup(
    name = "myname",
    version = "1.0",
    description = "some description",
    executables = [Executable("test.py", base = None)]    
)

我正在使用Python 3.3 x86,并在Windows 7上使用32位版本的cxFreeze(最新版本)。

我在解决这个问题时遇到了麻烦。首先,目录"C:\Python\32-bit..."在我的电脑上并不存在,所以我不明白为什么cxFreeze会试图去那里查找。有没有人知道该怎么处理这个问题,或者有人已经遇到过这个问题吗?

1 个回答

8

经过一番研究,我终于解决了这个问题。对于可能遇到同样问题的朋友们,以下是我找到的解决办法:

关于matplotlib的问题:我只需要明确告诉cxFreeze要包含matplotlib.backends.backend_tkagg。我的设置文件最后看起来是这样的:

import sys
from cx_Freeze import setup, Executable
packages = ['matplotlib.backends.backend_tkagg']

setup(
    name = "myname",
    version = "1.0",
    description = "some description",
    options = {'build_exe': {'packages':packages}},
    executables = [Executable("test.py", base = None)]    
)

至于BeautifulSoup的问题:网上有几篇帖子讨论过这个问题: cx_freeze sre_constants.error nothing to repeathttps://bitbucket.org/anthony_tuininga/cx_freeze/issue/59/sre_constantserror-nothing-to-repeat。 相关的结论是:cxFreeze的4.3.2版本有问题,导致了这个错误。我直接使用了cxFreeze 4.3.1来构建我的应用,问题就解决了。也有可能通过本地重建4.3.2来解决这个问题,但我没有尝试这个方法。

撰写回答