【发布时间】:2014-10-09 19:38:22
【问题描述】:
再次返回。我还在努力,但我无法修复它
脚本运行良好,但是当我使用 cx_freeze 冻结它时,会出现 cx_freeze 错误。
在消息的末尾说
OSError:proj 数据目录未找到。期待它在:C:\python34........mpl_toolkits\basemap\data
cx_freeze 创建的构建目录中没有包含数据吗?
我正在使用以下脚本进行冻结
base = None
def find_data_file(pyproj):
if getattr(sys,'XXXXs.exe',False):
datadir = os.path.dirname(sys.aaEjecutable.py)
else:
datadir = os.path.dirname(__file__)
return os.path.join(datadir,pyproj)
if (sys.platform == "win32"):
base = "Win32GUI"
exe = Executable(
script = "Conver.py",
icon = "logo4.ico",
targetName = "XXXXs.exe",
base = base
)
includefiles = ["Logo1.jpg","Logo2R.jpg","Logo2R.jpg","logo4.ico",
(('C:\Python34\Lib\site-packages\mpl_toolkits'),("mpl_toolkits"))]
setup(
name = "Conver",
version = "V3",
description = "conve",
author = "Jose ",
options = {"build_exe": {"include_files":includefiles}},
executables = [exe]
)
我认为它有问题。我必须包含底图,但我不知道该怎么做
我无法前进。脚本很好,但我可以在没有 python 的计算机上使用它
谢谢
【问题讨论】:
-
即使包含在内,它也可能无法使用:cx_Freeze 将包放入一个 zip 文件中,而 matplotlib 可能希望它是一个常规文件夹。
-
我该如何解决这个问题?
-
使用 includefiles 选项将 basemap/data 目录复制到您的构建目录中。然后在代码中加载底图之前将环境变量
BASEMAPDATA设置为该目录的位置。 See the FAQ 了解如何计算该位置。 -
好吧,我的速度太慢了,无论如何我希望能修复它。我编辑了我的冻结脚本,包括: options = {"build_exe": {"include_files":[( matplotlib.get_data_path(),"mpl-data"),"Logo3.jpg","Logo2.jpg","Logo1.jpg ","icon.ico"],}},我可以看到包含 basemapdata 的文件夹包含在构建中,但问题仍然存在。我知道我必须修改脚本(而不是冻结脚本)才能知道底图数据冻结时的位置。我看到了推荐的链接,但我不明白怎么做 thnaks
-
它看起来 类似于
if getattr(sys, 'frozen', False): os.environ['BASEMAPDATA'] = os.path.join(os.path.dirname(sys.executable), 'basemapdata')。您可能需要稍微调整一下,但它基本上说:如果在冻结的应用程序中运行,请将 BASEMAPDATA 环境变量设置为从我的 exe 位置计算的路径。
标签: cx-freeze matplotlib-basemap