Pyinstaller和Ply IOError:源代码不可用

时间:2016-02-23 22:54:46

标签: python python-2.7 pyinstaller ply

我是pyinstaller的新手,但是我已经对这个问题喋喋不休了几天了,我似乎无法弄清楚出了什么问题。我的脚本正常运行正常,但当我尝试使用pyinstaller构建时抛出IOerror,我的模块(包括ply.lex)似乎被包括在内但也许我是一个白痴?如果有人有任何建议,我将不胜感激......

这是我的错误(第65行是我的词法分析器的构建位置)

  Traceback (most recent call last):
  File "<string>", line 65, in <module>
  File "site-packages/ply/lex.py", line 906, in lex
  File "site-packages/ply/lex.py", line 580, in validate_all
  File "site-packages/ply/lex.py", line 822, in validate_rules
  File "site-packages/ply/lex.py", line 833, in validate_module
  File "inspect.py", line 690, in getsourcelines
  File "inspect.py", line 529, in findsource
IOError: source code not available

如果有人之前已经看过这个问题,或者可以提供帮助那就太棒了。

2 个答案:

答案 0 :(得分:0)

PLY坚持在文件中定义其语法。真实文件,包含名称和所有内容。我认为这是因为它的策略是缓存计算的语法表,包括将缓存表的时间戳与原始文件的时间戳进行比较。

显然,Pyinstaller将语法评估为<string>,因为它是从存档中提取的,而不是文件。 (Pyinstaller手册提到冻结的应用程序没有正确设置__file__,这就是PLY正在查看的内容。)您可以在创建安装程序包时尝试使用--onedir选项,但是当然行为略有不同。

答案 1 :(得分:0)

似乎使用PLY有必要包含py文件本身 如THIS链接所述,解决方法是将文件添加到pyinstaller生成的.spec文件中,如下所示:

datas=[('calc.py','.')]

请参阅pyinstaller使用spec文件了解有关将文件添加到可执行文件中的详细信息