Python 2.7 ply.yacc生成"无法获取源#34; pyinstaller

时间:2015-09-11 11:46:13

标签: python python-2.7

我"继承"一个已经离开公司的人的python应用程序,现在我很难让它在他自己的盒子里的模糊设置之外工作。

基本上我已经完成了所有工作以使其编译得很好并收集了所有必要的模块,因此没有任何问题。它从python运行得很漂亮。但是编译版本给了我这个:

LOADER: executable is C:\DSLR\v4\source\dist\SUAT\SUAT.exe
LOADER: homepath is C:\DSLR\v4\source\dist\SUAT
LOADER: _MEIPASS2 is NULL
LOADER: archivename is C:\DSLR\v4\source\dist\SUAT\SUAT.exe
LOADER: No need to extract files to run; setting extractionpath to homepath
LOADER: Already in the child - running user's code.
LOADER: manifestpath: C:\DSLR\v4\source\dist\SUAT\SUAT.exe.manifest
LOADER: Activation context created
LOADER: Activation context activated
LOADER: Python library: C:\DSLR\v4\source\dist\SUAT\python27.dll
LOADER: Manipulating evironment
LOADER: PYTHONPATH=C:\DSLR\v4\source\dist\SUAT
LOADER: PYTHONHOME=C:\DSLR\v4\source\dist\SUAT
LOADER: Manipulating Python's sys.path
LOADER: importing modules from CArchive
LOADER: extracted struct
LOADER: extracted pyi_os_path
LOADER: extracted pyi_archive
LOADER: extracted pyi_importers
LOADER: Installing import hooks
LOADER: out00-PYZ.pyz
LOADER: Running scripts
Filename is C:\DSLR\v4\source\dist\SUAT\enaml\core\parser.pyc
Sourcefile is C:\DSLR\v4\source\dist\SUAT\enaml\core\parser.py
ERROR:
Traceback (most recent call last):
  File "<string>", line 43, in <module>
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\enaml", line 61, in imports
  File "c:\users\olli~1.man\appdata\local\temp\pip-build-9rafnl\pyinstaller\PyInstaller\loader\pyi_importers.py", line 2
70, in load_module
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\enaml.core.import_hooks", line 18, in <module>
  File "c:\users\olli~1.man\appdata\local\temp\pip-build-9rafnl\pyinstaller\PyInstaller\loader\pyi_importers.py", line 2
70, in load_module
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\enaml.core.parser", line 3931, in <module>
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\ply.yacc", line 3273, in yacc
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\ply.yacc", line 2931, in validate_all
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\ply.yacc", line 2975, in validate_modules
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\inspect", line 692, in getsourcelines
  File "C:\DSLR\v4\source\build\SUAT\out00-PYZ.pyz\inspect", line 540, in findsource
IOError: could not get source code
LOADER: RC: -1 from suat
LOADER: OK.
LOADER: Deactivating activation context
LOADER: Releasing activation context
LOADER: Done
LOADER: Cleaning up Python interpreter.

文件名和源文件是我添加到检查器模块的打印语句,用于确定正在进行的操作。而且,是的,那些源文件确实不在那个dist文件夹中。这里令人讨厌的是,据我所知,SUAT.py中绝对没有以任何方式解决源代码或更改os目录。

我如何处理这样的事情?我一直在谷歌搜索,直到我的眼睛流血过去几天..我不知道为什么ply.yacc将寻找源文件一个编译文件夹,因为预计源不会在那里开始。 FWIW,我使用最新的PLY(3.6)和ENAML(0.9.8)。无奈之下,我得到了python(x y),基本上安装了所有东西,但它并没有改变一件事。我已经安装了mingw64,因为我遇到了已经设置为&#39; 1&#39;&#34;&#39;&#39;&#39;&#39;&#39;&#39;&#39;早期发布并需要运行SIP来更改运行时挂钩中的api文件..

据我所知,路径都指向正确的位置,并且pythonpath设置为应该的位置。

C:\Python27\Scripts;C:\Python27;C:\Python27\opencv\build\x86\vc10\bin;C:\PYTHON27\opencv\build\python\2.7;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;c:\windows\system32\downlevel;C:\mingw-w64\i686-5.2.0-posix-dwarf-rt_v4-rev0\mingw32\bin

1 个答案:

答案 0 :(得分:0)

最后,我最终编辑了SPEC文件,以便从python site-packages中复制相关的源文件。不太时尚,但它适用于单个文件夹构建。 Enaml绝对不应该在独立构建中拖曳py文件。我只是不确定只是为什么这些特定的库被寻找为.py文件的投资回报,而其余的被检查为.pyd是值得的。