问题描述
AttributeError: 'str' object has no attribute 'build_system_class'
import spack.cmd.info
import sys
pkg = sys.argv[1]
spack.cmd.info.print_text_info(pkg)
解决方法
根据我从您的问题和文档中看到的,我假设如下:
- 您正在尝试使用 Spack API (https://spack.readthedocs.io/en/latest/spack.cmd.html?highlight=print_text_info#spack.cmd.info.print_text_info)
- 您正在 spack 包管理器之上构建某种自动化,我怀疑它是一个包。
- 您正在使用 Python 的 sys 包 (https://docs.python.org/3/library/sys.html)
您遇到的问题与 Spack 无关,而与 Python 或面向对象编程有关。 您正在获取一个字符串 sys.argv[1],它表示命令行中提供的包名称,并将其提供给方法 print_text_info,该方法需要 PackageBase 类型的对象或其继承,例如 AutotoolsPackage。>
Python 使用字符串调用该方法并调用字符串不存在的 PackageBase 类型的成员,导致上述错误。
如果查看 spack 的 info.py,可以看到它在第一次尝试调用 build_system_class 方法时失败。
def print_text_info(pkg):
"""Print out a plain text description of a package."""
header = section_title(
'{0}: '
).format(pkg.build_system_class) + pkg.name
color.cprint(header)
如果您查看 info()
中的 spack info
方法(实现 spack.cmd.info
命令),您可以看到如何查找名称以获取包实例:
def info(parser,args):
pkg = spack.repo.get(args.package)
print_text_info(pkg)
因此,要将 PacakgeBase
实例传递给 print_text_info()
,您只需要 import spack.repo
并调用 spack.repo.get(name)
如上所述。