属性错误:模块'opcode'没有属性'__file__'用于包括熊猫和numpy的项目中的nuitka可执行文件



我正试图用nuitka编译一个包含numpy和pandas的python项目,但无论我如何编译,在启动最终可执行文件时都会出错。对于编译,我使用下一个命令:

python -m nuitka --standalone --follow-imports --plugin-enable=numpy --include-plugin-directory=.venv/lib/python3.6/site-packages/pandas --include-plugin-directory=.venv/lib/python3.6/site-packages/numpy --show-progress --show-scons newick2phylipmatrix.py

但当我尝试启动编译生成的可执行文件时,我会收到以下消息:

Traceback (most recent call last):
File "/home/mindsound/sandbox/distMatrix/newick2phylipmatrix.dist/newick2phylipmatrix.py", line 6, in <module>
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
File "/home/mindsound/sandbox/distMatrix/newick2phylipmatrix.dist/pandas/__init__.py", line 22, in <module pandas>
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
File "/home/mindsound/sandbox/distMatrix/newick2phylipmatrix.dist/pandas/compat/numpy/__init__.py", line 3, in <module pandas.compat.numpy>
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
File "/home/mindsound/sandbox/distMatrix/newick2phylipmatrix.dist/distutils/__init__.py", line 11, in <module>
AttributeError: module 'opcode' has no attribute '__file__'

目前,在不对代码进行任何更改的情况下,我设法用pyinstaller创建了一个独立的,但我不能用nuitka来做,但如果可能的话,我想用它来从编译优化中受益。

你知道这个问题从哪里来,是否可以解决吗?

我终于找到了同样的解决方案。virtualenv在创建时创建/复制的distutils与pythons原始发行版中的distutil不同。Nuitka的一位团队成员帮助我发现了同样的问题,并帮助我找到了解决方案。我发现的选项是从Pythons lib文件夹中提取distutils,并替换创建的virtualenv文件夹中现有的distutils文件夹,然后继续编译。我坚信,这个问题对你来说也会消失,就像对我来说一样。现在将寻求在我的完整项目工作的适当解决方案。

快乐汇编:(

最新更新