python - Scons 无法导入 _args_from_interpreter_flags

标签 python import scons

我正在尝试编译 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/

相关文章:

python - 使用 python-syntax 配置文件的最佳方法是什么(当然是在 python 中)?

c++ - 如何导入用户定义的函数

python - 使用 pygame 在 python 中通过套接字进行流式传输

python - 跳过处理 shpaml 脚本标签的优雅方式

Python条件对象实例化

python - 在 python 中一起使用不等于和 nan

python - SCons可以自己下载文件吗?

python - SCons 生成可变数量的目标

python - windows下scons的问题

Python 面向对象编程