py2exe和Sympy的奇怪错误

时间:2012-10-11 22:22:12

标签: python error-handling py2exe importerror sympy

好的,我正在使用SymPy制作程序。我使用sympy.Eq,sympy.solve和sympy.Symbol。当我编译我的程序并运行使用sympy.solve,sympy.Eq和sympy.Symbol的命令(它是用户界面)时。它在未编译时非常有效,但是当我使用py2exe(作为捆绑的可执行文件)编译它时,它会给出我的错误:

Traceback (most recent call last):
  File "RateTime.py", line 46, in <module>
  File "RateTime.py", line 33, in main
  File "RateTime.py", line 4, in get_catch_up_time
  File "sympy\solvers\solvers.pyc", line 883, in solve
  File "sympy\solvers\solvers.pyc", line 316, in check_assumptions
  File "sympy\assumptions\ask.pyc", line 88, in ask
  File "sympy\assumptions\assume.pyc", line 94, in _eval_ask
  File "sympy\assumptions\assume.pyc", line 157, in eval
  File "sympy\utilities\source.pyc", line 26, in get_class
ImportError: No module named handlers

我尝试从

更改source.py中的代码
lookup_view = getattr(__import__(mod_name, {}, {}, ['*']), func_name)

exec "import "+mod_name+" as MODULE"
lookup_view = getattr(MODULE, func_name)

即使项目未编译,它也给了我错误。我假设没有包含同意的python文件,因为它通常不是立即导入的。我不得不改回来。有没有办法来解决这个问题?我真的需要将我的python项目作为可执行文件分发。谢谢!

2 个答案:

答案 0 :(得分:2)

我认为ImportError确实意味着py2exe没有获取sympy.assumptions.handlers及其子模块。最简单的解决方法可能是添加

import sympy.assumptions.handlers.calculus 

你导入同情的地方。

除了“微积分”之外,您可能需要对“order”,“sets”和“ntheory”执行相同的操作。

答案 1 :(得分:0)

如果您不介意更改症状代码,我认为您可以将这些文件添加到相关的__init__.py文件中,以便在情感发生时导入它们。