AttributeError: объект «модуль» не имеет атрибута для метода python

Недавно я установил QuantLib-Python на Ubuntu 16.04 через apt:

sudo apt-get install -y libquantlib0-dev libquantlib0v5 quantlib-python

Кажется, когда я вызываю QuantLib через unittest в Eclipse PyDev, я получаю следующую ошибку:

AttributeError: 'module' object has no attribute 'Date'

Однако я могу успешно запустить QuantLib через терминал или как обычный Python-скрипт из Eclipse или как Pytest из Eclipse. См. пример кода ниже:

>>> import QuantLib as ql
>>> print ( ql.Date(1,1,2010) )
January 1st, 2010

Общая библиотека QuantLib установлена ​​в следующую папку:

$ ls /usr/lib/python2.7/dist-packages/QuantLib/
init.py init.pyc QuantLib.py QuantLib.pyc _QuantLib.so

Папка QuantLib включена в мой sys.path как в Eclipse, так и в Терминале. Результат приведен ниже:

/usr/lib/python2.7
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/lib-dynload
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/local/lib/python2.7/dist-packages
/usr/local/lib/python2.7/dist-packages/Mako-1.0.7-py2.7.egg
/usr/local/lib/python2.7/dist-packages/MarkupSafe-1.0-py2.7-linux-x86_64.egg
/usr/local/lib/python2.7/dist-packages/appdirs-1.4.3-py2.7.egg
/usr/local/lib/python2.7/dist-packages/cx_Oracle-6.0rc2-py2.7-linux-x86_64.egg
/usr/local/lib/python2.7/dist-packages/decorator-4.1.2-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pip-9.0.1-py2.7.egg
/usr/local/lib/python2.7/dist-packages/py-1.4.34-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pycuda-2017.1-py2.7-linux-x86_64.egg
/usr/local/lib/python2.7/dist-packages/pytest-3.1.3-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pytools-2017.4-py2.7.egg   

Кто-нибудь знает, почему модуль QuantLib не работает через среду модульного тестирования?

PS: этот пост был изменен после того, как я узнал, что он терпит неудачу только через unittest.


person user1221647    schedule 19.08.2017    source источник
comment
Могу ли я увидеть результат import sys; print(sys.path).   -  person stovfl    schedule 20.08.2017
comment
@stovfl спасибо за ответ, я просто тестировал это на самом деле :) /usr/local/lib/python2.7/dist-packages/py-1.4.34-py2.7.egg /usr/local/lib/python2. 7/dist-packages/pycuda-2017.1-py2.7-linux-x86_64.egg /usr/local/lib/python2.7/dist-packages/pytest-3.1.3-py2.7.egg /usr/local/ lib/python2.7/dist-пакеты/pytools-2017.4-py2.7.egg   -  person user1221647    schedule 20.08.2017
comment
Вам не хватает '/usr/lib/python2.7/dist-packages' в Eclipse.   -  person stovfl    schedule 20.08.2017
comment
Давайте продолжим обсуждение в чате.   -  person user1221647    schedule 20.08.2017


Ответы (1)


Фикстура юнит-теста, по-видимому, была написана в следующем файле QuantLib.py (это была ошибка!!!), в то время как мое соглашение об именах — TestNamesomething, а PyTest был написан правильно. Очевидно, это сбивало с толку переводчика, и, в конце концов, это было последнее, что я заметил. Я изменил файл unitest на что-то другое, кроме QuantLib.py, и все вернулось в норму. Результаты испытаний приведены ниже:

import unittest
import QuantLib as ql

class QuantLibFixture(unittest.TestCase):
    def test_dates(self):
        date1 = ql.Date(1,12,2017)

if __name__ == '__main__':
    unittest.main()

ошибка юниттеста до исправления файла:

>>> python QuantLib.py
E
======================================================================
ERROR: test_dates (__main__.QuantLibFixture)
----------------------------------------------------------------------
Traceback (most recent call last):
File "QuantLib.py", line 12, in test_dates
    date1 = ql.Date(1,12,2017)
AttributeError: 'module' object has no attribute 'Date'
FAILED (errors=1)

запуск юниттеста после исправления:

test_dates (tests.PyLib.Adhoc.TestQuantLib.QuantLibFixture) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
person user1221647    schedule 20.08.2017