使用scons 0.98.1和python2.7使用旧版本生成gem5(stt/sdo/Invisipec)失败

2024-09-30 22:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

ubuntu版本20.04

python --version
Python 2.7.18

scons -version
script: v0.98.1.r2881 
engine: v0.98.1.r2881

因为最新的gem5使用python3/scons3.0.0 我尝试了旧版本的项目,它只支持旧版本

当我使用命令scons build/X86/gem5.opt -j5构建时 错误跳转并显示消息

*** Error loading site_init file './site_scons/site_init.py':
  File "./site_scons/site_init.py", line 51

    except SystemExit, e:

                     ^
SyntaxError: invalid syntax

这是一个简单的python2/python3语法错误。我可以通过将“,”替换为“as”来解决此问题

但这涉及到另一个严肃的问题。有许多不同于旧文件和最新文件的文件。这意味着我必须修复所有语法错误文件。(如果这是唯一的办法……)

这就是我尝试使用旧的scon和python来构建项目的原因

首先,我只是认为可以通过强制python使用2.7版本来解决这个问题,它突然出现了

** Error loading site_init file './site_scons/site_init.py':
File "./site_scons/site_init.py", line 55

print """
For more details, see:
http://gem5.org/Dependencies
"""

^

SyntaxError: invalid syntax

然后我下载旧的SCON(0.98.0和0.98.1)

我不知道哪个地方适合安装它 所以我把这两个都安装在

/usr/local/lib and /usr/lib

完成此步骤后,版本将成功切换到0.98.1

但还是失败了

Site init file './site_scons/site_init.py' raised exception: name 'EnsureSConsVersion' is not defined
NameError: name 'EnsureSConsVersion' is not defined:
  File "/usr/lib/scons-0.98.0/SCons/Script/Main.py", line 1231:
    _exec_main(parser, values)
  File "/usr/lib/scons-0.98.0/SCons/Script/Main.py", line 1195:
    _main(parser)
  File "/usr/lib/scons-0.98.0/SCons/Script/Main.py", line 833:
    _load_site_scons_dir(d)
  File "/usr/lib/scons-0.98.0/SCons/Script/Main.py", line 682:
    imp.load_module(site_init_modname, fp, pathname, description)
  File "./site_scons/site_init.py", line 49:
    EnsureSConsVersion(0, 98)

Tags: 文件py版本initmainlibusrline
1条回答
网友
1楼 · 发布于 2024-09-30 22:26:26

遗憾的是,您得到了一个以Python2配置脚本形式存在的技术债务包,作者选择编写该配置脚本是为了与Python1.5.2兼容,而不是与Python3兼容。在Python2.5(2006)中已经可以编写except子句和print()调用,这些调用也可以在Python3中使用。但在某些情况下,忽视这种可能性是很常见的。无论你认为这是不负责任的智力懒惰,还是谨慎的保守主义,都是品味的问题

与其他人一样,scons项目有dropped support for Python 2,我认为最好的方法是将Python2配置脚本迁移到Python3

一开始似乎更容易获得旧版本的scons来使用现有的配置脚本。这可能会解决眼前的问题,但也会推掉技术债务。如果你陷入困境,很难找到帮助

您似乎不知道Python提供的迁移工具将完成大部分繁琐的工作。该模块被称为^{},它将重写except子句和print()调用,调整import以处理重命名的标准库模块,以及其他许多事情

有些东西是lib2to3无法解决的:它可以解决语法问题,但不能解决语义问题,例如整数除法是//而不是/,Python 2代码依赖于字符串和ByTestRing之间缺少Python 3的区别。要获得这些方面的帮助,我推荐Lennart Regebro的书Supporting Python 3。在最近的一个迁移项目中,我很感激地使用了这本书

相关问题 更多 >