ModuleNotFoundError: модуль не указан - PullRequest
0 голосов
/ 18 сентября 2018

In conftest.py Я загружаю модуль blueprint.Manifest, который, в свою очередь, загружает модуль Head, например. Пожалуйста, посмотрите минимальный пример внизу описания. Но я получаю следующую ошибку:

$ py.test manifest/test_schema.py 
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/_pytest/config/__init__.py", line 381, in _getconftestmodules
    return self._path2confmods[path]
KeyError: local('/home/app/ip-spotlight/code/cicd/lydia/manifest/test_schema.py')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/_pytest/config/__init__.py", line 381, in _getconftestmodules
    return self._path2confmods[path]
KeyError: local('/home/app/ip-spotlight/code/cicd/lydia/manifest')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/_pytest/config/__init__.py", line 412, in _importconftest
    return self._conftestpath2mod[conftestpath]
KeyError: local('/home/app/ip-spotlight/code/cicd/lydia/conftest.py')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/_pytest/config/__init__.py", line 418, in _importconftest
    mod = conftestpath.pyimport()
  File "/usr/lib/python3.6/site-packages/py/_path/local.py", line 668, in pyimport
    __import__(modname)
  File "/usr/lib/python3.6/site-packages/_pytest/assertion/rewrite.py", line 296, in load_module
    six.exec_(co, mod.__dict__)
  File "/home/app/ip-spotlight/code/cicd/lydia/conftest.py", line 5, in <module>
    from blueprint.Manifest import ManifestSchema
  File "/home/app/ip-spotlight/code/cicd/lydia/blueprint/Manifest.py", line 5, in <module>
    from Head import HeadSchema
ModuleNotFoundError: No module named 'Head'
ERROR: could not load /home/app/ip-spotlight/code/cicd/lydia/conftest.py

моя текущая среда

$ py.test --version
This is pytest version 3.8.0, imported from /usr/lib/python3.6/site-packages/pytest.py
setuptools registered plugins:
  pytest-xdist-1.23.0 at /usr/lib/python3.6/site-packages/xdist/plugin.py
  pytest-xdist-1.23.0 at /usr/lib/python3.6/site-packages/xdist/looponfail.py
  pytest-timeout-1.3.2 at /usr/lib/python3.6/site-packages/pytest_timeout.py
  pytest-sugar-0.9.1 at /usr/lib/python3.6/site-packages/pytest_sugar.py
  pytest-metadata-1.7.0 at /usr/lib/python3.6/site-packages/pytest_metadata/plugin.py
  pytest-html-1.19.0 at /usr/lib/python3.6/site-packages/pytest_html/plugin.py
  pytest-forked-0.2 at /usr/lib/python3.6/site-packages/pytest_forked/__init__.py
  celery-4.2.1 at /usr/lib/python3.6/site-packages/celery/contrib/pytest.py

Минимальный пример: структура моего проекта:

$ tree
.
|-- attributes
|   `-- __init__.py
|-- bgp
|   `-- __init__.py
|-- blueprint
|   |-- Head.py
|   |-- __init__.py
|   |-- InterfacesIx.py
|   |-- InterfacesLacp.py
|   |-- Manifest.py
|   |-- NeighborIx.py
|   `-- Tail.py
|-- communities
|   `-- __init__.py
|-- conftest.py
|-- customize
|   `-- __init__.py
|-- interfaces
|   `-- __init__.py
|-- manifest
|   |-- blueprint
|   |-- __init__.py
|   `-- test_schema.py
|-- policies
|   `-- __init__.py
|-- prefixes
|   `-- __init__.py
`-- pytest.ini

conftest.py выглядит так:

import os
import yaml
import pytest

from blueprint.Manifest import ManifestSchema


@pytest.fixture(scope="session")
def manifest():
    with open(
        "{}/ip-spotlight/code/cicd/manifest.yaml".format(os.environ["APPFOLDER"]), "rt"
    ) as f:
        manifest = yaml.safe_load(f.read())
        schema = ManifestSchema()
        appobj = schema.load(manifest)
        return appobj

и blueprint/Manifest.py выглядит так:

import marshmallow
import dictdiffer
import requests

from Head import HeadSchema

Не могли бы вы сообщить, что я делаю неправильно, и помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 18 сентября 2018
from Head import HeadSchema

Это абсолютный импорт, и это означает, что пакет предназначен для Python 2.

Последний выпуск был 2013 .Пакет просто слишком старый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...