我正在尝试编译 Godot engine按照说明 here
当我运行scons bin/godot
时正如教程所说,我收到以下错误:
scons: Reading SConscript files ...
ImportError: cannot import name _args_from_interpreter_flags:
File "/home/grayfox/github/godot2/godot/SConstruct", line 9:
import multiprocessing
File "/usr/lib64/python2.7/multiprocessing/__init__.py", line 65:
from multiprocessing.util import SUBDEBUG, SUBWARNING
File "/usr/lib64/python2.7/multiprocessing/util.py", line 40:
from subprocess import _args_from_interpreter_flags
SConstruct 文件以这种方式开始:
EnsureSConsVersion(0,14);
import string
import os
import os.path
import glob
import sys
import methods
import multiprocessing
...
如果我尝试运行 python SConstruct
我收到一条错误,提示缺少 scons 定义的函数(即脚本在执行所有导入后失败)。
评论import multiprocessing
修复了问题,但我不想修改该文件,因为如果我发出拉取请求,我将不得不恢复更改。该项目非常活跃,所以我相信这与我的本地配置有关。
关于脚本无法导入的任何想法 _args_from_interpreter_flags
仅当我通过 scons 执行它时?
[更新]
我重新安装了 Gentoo,问题仍然存在。我做了一些测试,发现了这一点:
在 python 终端中>
>>> import SCons.Script
>>> from subprocess import _args_from_interpreter_flags
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name _args_from_interpreter_flags
>>> import subprocess
>>> subprocess.__file__
'/usr/lib64/python2.7/site-packages/SCons/compat/_scons_subprocess.pyc'
但是如果我这样做,输出会有所不同:
>>> import subprocess
>>> subprocess.__file__
'/usr/lib64/python2.7/subprocess.pyc'
所以我更新我的问题:这是一个错误吗?有人可以在其他发行版中复制它吗?如果这是一个错误,我应该将其报告给 Gentoo 还是 SCons?
[另一更新]
添加temp.extend([os.path.join(x, 'lib64') for x in prefs])
没用,同样的错误。
添加print sys.path
在紧凑模块的开头给出:
['/usr/lib64/python-exec/python2.7/scons-local-2.3.0',
'/usr/lib64/python-exec/python2.7/scons-local',
'/usr/lib64/python2.7/site-packages/lib32/scons-2.3.0',
'/usr/lib32/scons-2.3.0',
'/usr/local/lib32/scons-2.3.0',
'/usr/lib64/python2.7/site-packages/lib/python2.7/site-packages/scons-2.3.0',
'/usr/lib/python2.7/site-packages/scons-2.3.0',
'/usr/local/lib/python2.7/site-packages/scons-2.3.0',
'/usr/lib64/scons-2.3.0',
'/usr/lib64/python2.7/site-packages/lib32/scons',
'/usr/lib32/scons',
'/usr/local/lib32/scons',
'/usr/lib64/python2.7/site-packages/lib/python2.7/site-packages/scons',
'/usr/lib/python2.7/site-packages/scons',
'/usr/local/lib/python2.7/site-packages/scons',
'/usr/lib64/scons',
'/usr/lib64/python2.7/site-packages/RBTools-0.6-py2.7.egg',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7', #It's here, so what's the problem?
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib64/python2.7/site-packages/gtk-2.0',
'/usr/lib64/python2.7/site-packages/wx-2.8-gtk2-unicode']
最佳答案
看起来这实际上并不是直接与 SCons 连接的问题。您的系统中可能安装了一个外来的“子进程”模块/包。另请查看Cannot import name _args_from_interpreter_flags这似乎是相关的。
根据您更新的问题:我尝试在我的机器上编译 Godot(Python 2.7.3、SCons 2.3.1、Ubuntu 12.04 LTS)并且它运行良好,因此问题与提供的 SConstruct (及其支持子文件夹中的构建描述文件)。仅当原始“subprocess.py
”导入失败时,才会使用“_scons_subprocess
”模块。所以我怀疑SCons启动脚本设置了错误的sys.path
,这可能在64位下发生(参见问题http://scons.tigris.org/issues/show_bug.cgi?id=2657)。
添加“temp.extend([os.path.join(x, 'lib64') for x in prefs])
”后,您的“print sys.path
” 语句在其输出中显示类似“/usr/lib64/python-exec”的路径。谷歌搜索出现了页面http://forums.gentoo.org/viewtopic-t-985402-start-0.html为我。它描述了 Gentoo 的一个问题,其中程序作为 pip
的链接安装。请按照给出的建议进行操作,看看这是否可以解决您的问题。
关于python - Scons 无法导入 _args_from_interpreter_flags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664555/