即使它在一个模块中,也无法实例化一个类

时间:2014-11-07 11:54:26

标签: python

我想使用pycvss,所以我通过pip安装了它。

实例化Cvss()类失败,但是:

>>> import pycvss
>>> c = pycvss.Cvss()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Cvss'

检查模块时,它确实看起来很空:

>>> dir(pycvss)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

但是当我检查python查找模块的位置时:

>>> print(pycvss.__file__)
/usr/local/python-2.7.8/lib/python2.7/site-packages/pycvss/__init__.pyc

看起来像那样,

/usr/local/python-2.7.8/lib/python2.7/site-packages/pycvss/pycvss.py

定义`Cvss():

(...)
class Cvss(object):
  """Common Vulnerability Scoring System.

  Use this class to set base, temporal and environmental vectors and
  compute scores.
  Cf module level documentation for sample usage.
  """

  _BASE_VECTOR = (AV, AC, Au, C, I, A)
(...)

我必须遗漏一些明显的东西,但是我看的越多,我看得越少(其他模块都很好,包括pip安装的模块,例如requests)。

2 个答案:

答案 0 :(得分:2)

该项目中的__init__ file 为空。您需要导入nested pycvss module

from pycvss import pycvss

c = pycvss.Cvss()

文档对此并不清楚;我在项目中提交documentation issue

就个人而言,我会在__init__.py文件中添加一行:

from pycvss import Cvss

并更新文档以说明如何导入该类。

请注意,项目期望enum library可用。如果您不使用Python 3.4或更高版本,则还必须安装enum34 backport package

答案 1 :(得分:1)

pycvss是您需要将其导入为

的包
import pycvss.pycvss
c = pycvss.pycvss.Cvss()

或者这样做: -

from pycvss import pycvss
c = pycvss.Cvss()