nornir-automation / nornir

Pluggable multi-threaded framework with inventory management to help operate collections of devices
https://nornir.readthedocs.io/
Apache License 2.0
1.39k stars 235 forks source link

Nornir2: can't import napalm_get #602

Closed RuiMeireles closed 3 years ago

RuiMeireles commented 3 years ago

I am getting a circular dependency error when trying to do: from nornir_napalm.plugins.tasks import napalm_get If I just import nornir_napalm there's no problem

I am running Python 3.8.5, with the latest nornit modules.

(venv-3.8) ruimeireles@rui-ubuntu:~/git/automation-poc$ pip3 list | grep nornir
nornir                       3.0.0               
nornir-jinja2                0.1.0               
nornir-napalm                0.1.1               
nornir-netbox                0.1.1               
nornir-netmiko               0.1.1               
nornir-scrapli               2020.10.10          
nornir-utils                 0.1.0

Here's the output I get when I do from nornir_napalm.plugins.tasks import napalm_get

(venv-3.8) ruimeireles@rui-ubuntu:~/git/automation-poc$ python3 napalm.py 
Traceback (most recent call last):
  File "napalm.py", line 4, in <module>
    from nornir_napalm.plugins.tasks import napalm_get
  File "/home/ruimeireles/.local/lib/python3.8/site-packages/nornir_napalm/plugins/tasks/__init__.py", line 1, in <module>
    from .napalm_cli import napalm_cli
  File "/home/ruimeireles/.local/lib/python3.8/site-packages/nornir_napalm/plugins/tasks/napalm_cli.py", line 5, in <module>
    from nornir_napalm.plugins.connections import CONNECTION_NAME
  File "/home/ruimeireles/.local/lib/python3.8/site-packages/nornir_napalm/plugins/connections/__init__.py", line 3, in <module>
    from napalm import get_network_driver
  File "/home/ruimeireles/git/automation-poc/napalm.py", line 4, in <module>
    from nornir_napalm.plugins.tasks import napalm_get
  File "/home/ruimeireles/.local/lib/python3.8/site-packages/nornir_napalm/plugins/tasks/napalm_get.py", line 6, in <module>
    from nornir_napalm.plugins.connections import CONNECTION_NAME
ImportError: cannot import name 'CONNECTION_NAME' from partially initialized module 'nornir_napalm.plugins.connections' (most likely due to a circular import) (/home/ruimeireles/.local/lib/python3.8/site-packages/nornir_napalm/plugins/connections/__init__.py)

Is this a bug? How can I import this command?

RuiMeireles commented 3 years ago

It seems like the module can't find the tasks package.

In [14]: help(nornir_napalm.plugins)

Help on package nornir_napalm.plugins in nornir_napalm:

NAME
    nornir_napalm.plugins

PACKAGE CONTENTS
    connections (package)
    tasks (package)

FILE
    /home/ruimeireles/git/automation-poc/venv/lib/python3.8/site-packages/nornir_napalm/plugins/__init__.py
In [15]: help(nornir_napalm.plugins.tasks)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-e631f566b8e1> in <module>
----> 1 help(nornir_napalm.plugins.tasks)

AttributeError: module 'nornir_napalm.plugins' has no attribute 'tasks'

I've checked, and the files are present:

(venv) ruimeireles@rui-ubuntu:~/git/automation-poc$ ls -la ./venv/lib/python3.8/site-packages/nornir_napalm/plugins/
total 20
drwxrwxr-x 5 ruimeireles ruimeireles 4096 okt 14 11:51 .
drwxrwxr-x 4 ruimeireles ruimeireles 4096 okt 14 11:51 ..
drwxrwxr-x 3 ruimeireles ruimeireles 4096 okt 14 11:51 connections
-rw-rw-r-- 1 ruimeireles ruimeireles    0 okt 14 11:51 __init__.py
drwxrwxr-x 2 ruimeireles ruimeireles 4096 okt 14 11:51 __pycache__
drwxrwxr-x 3 ruimeireles ruimeireles 4096 okt 14 11:51 tasks
dbarrosop commented 3 years ago

Closing as this is not the place to report issues on plugins. If there is an issue with a plugin report it to the plugin, please.

The issue is most likely the filename of your script. Rename napalm.py to something else as you are probably shadowing napalm library namespace

RuiMeireles commented 3 years ago

Oh, what a dumb mistake. Yes, it was indeed caused by my script being named 'napalm.py'.

Thanks David.