我写的一个非常复杂的应用程序集成了很多模块。 Matplotlib给出了一些错误,直到我明确地将它包含在py2exe文件中。我编译并尝试启动程序后收到此错误,但我不明白这意味着什么。任何帮助表示赞赏!
Py2exe编译文件:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {
'py2exe': {
'optimize': 2,
'includes' : ["matplotlib.backends.backend_tkagg"],
'packages' : ['matplotlib', 'pytz'],
}
},
windows = [{'script': "MYAPP.py", "icon_resources": [(1, "s.ico")]}],
zipfile = "shared.lib",
编译后启动时出错:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\pint\unit.py", line 756, in load_definitions
with closing(pkg_resources.resource_stream(__name__, file)) as fp:
File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1167, in resource_stream
self, resource_name
File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1602, in get_resource_stream
return io.BytesIO(self.get_resource_string(manager, resource_name))
File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1605, in get_resource_string
return self._get(self._fn(self.module_path, resource_name))
File "C:\Python34\lib\site-packages\pkg_resources\__init__.py", line 1683, in _get
return self.loader.get_data(path)
OSError: [Errno 0] Error: 'pint\\default_en.txt'
答案 0 :(得分:0)
我认为这里的问题在于py2exe处理txt文件。看起来你正在使用pint模块,而pint中的文件是default_en.txt
(你编译的应用程序正在抱怨)。当py2exe编译pint时,它会忽略pint包中包含的txt文件。
我使用的解决方法是在我的脚本中声明:
ureg = pint.UnitRegistry('\path\to\default_en.txt')
另外,我将以下内容添加到我的py2exe的setup.py文件中
"packages":["pkg_resources"],
来自:http://pint.readthedocs.org/en/0.6/index.html
如果您对默认单位进行翻译或定义一个全新的集合,则不希望附加已翻译的定义,因此您只需将文件名提供给构造函数:
来自pint import UnitRegistry ureg = UnitRegistry('/ your / path / to / default_es.txt')
我在项目中创建了\path\to\
个位置,并将default_en.txt
和constants_en.txt
添加到该文件夹(从pint文件夹复制)。然后在py2exe中我将这些文件添加到我的data_files。
真正的解决方案是弄清楚如何让py2exe包含模块文件夹中的txt文件,但我还没有弄明白。