我是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
如果有人之前已经看过这个问题,或者可以提供帮助那就太棒了。
答案 0 :(得分:0)
PLY坚持在文件中定义其语法。真实文件,包含名称和所有内容。我认为这是因为它的策略是缓存计算的语法表,包括将缓存表的时间戳与原始文件的时间戳进行比较。
显然,Pyinstaller将语法评估为<string>
,因为它是从存档中提取的,而不是文件。 (Pyinstaller手册提到冻结的应用程序没有正确设置__file__
,这就是PLY正在查看的内容。)您可以在创建安装程序包时尝试使用--onedir
选项,但是当然行为略有不同。
答案 1 :(得分:0)
似乎使用PLY有必要包含py文件本身 如THIS链接所述,解决方法是将文件添加到pyinstaller生成的.spec文件中,如下所示:
datas=[('calc.py','.')]
请参阅pyinstaller使用spec文件了解有关将文件添加到可执行文件中的详细信息