【问题标题】:Error when freezing pandas/NumPy 1.7.0 code with cx_Freeze使用 cx_Freeze 冻结 pandas/NumPy 1.7.0 代码时出错
【发布时间】:2013-02-04 20:18:43
【问题描述】:

我正在尝试使用 cx_Freeze 冻结 Python 脚本。该脚本使用熊猫。当我运行 cx_Freeze 创建的可执行文件时,我得到以下 Traceback:

[...]  
File "C:\Python27\lib\site-packages\pandas\__init__.py", line 6, in <module>  
from . import hashtable, tslib, lib  
File "ExtensionLoader_pandas_hashtable.py", line 11, in <module>  
File "numpy.pxd", line 156, in init pandas.hashtable (pandas\hashtable.c:20273)  
File "C:\Python27\lib\site-packages\numpy\__init__.py", line 147, in <module>  
from core import *  
AttributeError: 'module' object has no attribute 'sys'

我正在使用(用于测试)的唯一熊猫代码是:

from pandas import DataFrame
import pandas as pd
d = {'one' : [1., 2., 3., 4.],
     'two' : [4., 3., 2., 1.]}
df = DataFrame(d)

当我尝试在 cx_Freeze 设置文件的“packages”下包含“pandas”时,它在冻结过程中失败:

ValueError: too many values to unpack  

对于 Windows7(64 位)上的 32 位和 64 位版本的 Python 2.7.3,我遇到了同样的问题。 pandas 版本是 0.10.1,cx_Freeze 是 4.3.1。

各位大熊猫或 cx_Freeze 大神有什么想法吗?

【问题讨论】:

  • ValueError 是来自冻结,还是来自运行冻结的代码?有追溯吗?
  • 那是冻结期间的Traceback,我今天晚些时候应该可以发布完整的Traceback。
  • 如果以this traceback 结尾,则为bug someone else encountered,但我无法重现。可能是 Windows 特定的错误。

标签: python numpy pandas cx-freeze


【解决方案1】:

我刚刚查看了 /numpy/core/init.py 并注意到倒数第二行:

有“del sys”

如果您注释掉这一行,它将按预期工作。我还注意到 numpy 1.6.2 中没有“del sys”

您可以尝试联系 numpy 以检查他们为什么需要这样做。

【讨论】:

  • 完美,这行得通!多谢。不过,您仍然需要在“packages”下列出“numpy”。
  • 嗨,Felix,我使用 include=['numpy'] 代替。比如:options = dict(compressed=True,includes=['numpy'],excludes=['Tkinter','tcl','ttk','tkinter'],optimize=2), setup(name = "numpybug" , version = "0.1", description = "Sample cx_Freeze script", options=dict(build_exe=options), executables = executables) 它对我有用。
  • 嗨,Felix,请告诉你我已经在 numpy 邮件列表上发布了一条注释,后来有人提交了 cx_freeze 的补丁。链接在这里:sourceforge.net/p/cx-freeze/bugs/36希望有用。
  • 哇 - 非常感谢!我还将您的讨论粘贴在 numpy 邮件列表中以供参考:mail.scipy.org/pipermail/numpy-discussion/2013-February/…
  • 他们这样做是因为 __init__.py 中的任何名称都将在您执行 from numpy.core import * 时被导入,并且使用非 NumPy 名称(如 sys)污染命名空间是不好的(不过,更好的解决方法是使用__all__)。
【解决方案2】:

这两个错误的原因似乎是NumPy 1.7.0(pandas 建立在 NumPy 之上)。当我使用NumPy 1.6.2 运行代码时,一切正常。

【讨论】:

  • @ThomasK 你能看看我的极简主义code sample 给我一个提示,为什么 NumPy 1.7.0 失败而 1.6.2 没有?谢谢
  • 当我手动将numpy 文件夹复制到构建文件夹中时,它可以工作。但是,将其列在 'packages':['numpy'] 下并没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多