Pyinstaller and Ply IOError: source code not available

Pyinstaller and Ply IOError: source code not available

我是 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

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

PLY 坚持在文件 中定义其语法。真实的文件,有名字和一切。我认为这是因为它缓存计算语法表的策略,这涉及将缓存表的时间戳与原始文件的时间戳进行比较。

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

看来对于PLY,有必要包含py文件本身 如 link 所述,解决方法是将文件添加到 pyinstaller 生成的 .spec 文件中,如下所示:

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

有关将文件添加到可执行文件的详细信息,请参阅 pyinstaller Using spec file