0

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)
4

1 回答 1

1

根据我从您的问题和文档中看到的内容,我假设以下内容:

  1. 您正在尝试使用 Spack API ( https://spack.readthedocs.io/en/latest/spack.cmd.html?highlight=print_text_info#spack.cmd.info.print_text_info )
  2. 您正在 spack 包管理器之上构建某种自动化,我怀疑它是一个包。
  3. 您正在使用 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)

于 2021-03-05T12:29:12.220 回答