【问题标题】:Scons fails to import _args_from_interpreter_flagsScons 无法导入 _args_from_interpreter_flags
【发布时间】:2014-05-14 20:31:15
【问题描述】:

我正在尝试按照here 的说明编译Godot engine

当我按照教程所述运行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 的任何想法?

[更新]

我重新安装了 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']

【问题讨论】:

  • 我可以从错误消息中看到您使用的是 Python 2.7,但是如果您在命令行中键入:“python --version”,您会得到什么? SCons 不适用于 python 3+,我怀疑这可能是问题所在。
  • python --version 输出Python 2.7.5。我也尝试切换到 python 3(使用 gentoo 的select python),但我得到了同样的错误。 scons 似乎使用了一个包装文件来选择正确的解释器。

标签: python import scons


【解决方案1】:

看起来这并不是直接连接到 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 的链接。请遵循给定的建议,看看这是否能解决您的问题。

【讨论】:

  • 检查我的问题更新。实际上我有另一个子流程模块,但它是 scons 的。
【解决方案2】:

这是 Gentoo 的 scons-2.3.0 和 scons-2.3.1 ebuild 中的一个错误(参见 bug report)。它已在 2.3.1-r1 及更高版本中修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多