我正按照说明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
修复了该问题,但我不想修改该文件,因为如果我提出拉取请求,我将不得不恢复更改。该项目非常活跃,因此我认为这与我的本地配置有关。
只有在我通过scons执行脚本时脚本无法导入_args_from_interpreter_flags
的任何想法?
[UPDATE]
我做了一个全新的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']
答案 0 :(得分:2)
看起来好像这不是一个直接连接到SCons的问题。您可能在系统中安装了外来“子进程”模块/包。另请查看似乎相关的Cannot import name _args_from_interpreter_flags。
基于您更新的问题:我尝试在我的机器上编译Godot(Python 2.7.3,SCons 2.3.1,Ubuntu 12.04 LTS)并且运行正常,因此问题与提供的SConstruct(及其相关)无关支持子文件夹中的构建描述文件)。仅当导入原始“_scons_subprocess
”失败时才会使用“subprocess.py
”模块。所以我怀疑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
的链接安装。请按照给出的建议,看看这是否可以解决您的问题。