用cxFreeze导入matplotlib.pyplot和BeautifulSoup
我正在尝试使用cxFreeze为我的Python脚本编译一个可执行文件。在我需要导入的许多库中,有两个在使用cxFreeze时似乎出现了问题。具体来说,看看下面这个test.py脚本:
print('matplotlib.pyplot')
import matplotlib.pyplot
用cxFreeze编译并运行后,出现了以下输出:
另外,下面这个test.py脚本:
print('BeautifulSoup from bs4')
from bs4 import 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 个回答
经过一番研究,我终于解决了这个问题。对于可能遇到同样问题的朋友们,以下是我找到的解决办法:
关于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 repeat, https://bitbucket.org/anthony_tuininga/cx_freeze/issue/59/sre_constantserror-nothing-to-repeat。 相关的结论是:cxFreeze的4.3.2版本有问题,导致了这个错误。我直接使用了cxFreeze 4.3.1来构建我的应用,问题就解决了。也有可能通过本地重建4.3.2来解决这个问题,但我没有尝试这个方法。