<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: NSO python3 inheritance error - ImportError: No module named in NSO Developer Hub Discussions</title>
    <link>https://community.cisco.com/t5/nso-developer-hub-discussions/nso-python3-inheritance-error-importerror-no-module-named/m-p/3454484#M482</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Rain.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem here is not related to running under NSO (well, yes, indirectly) and has nothing to do with symbolic links.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Python 3 has a completely new module import system which need some special treatment. If we have a structure like this (trying to mimic yours):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; hostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; └── python&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── hostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── ext&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp; ├── __init__.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp; └── newhostlist.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── __init__.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── main.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt; looks like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, suppose our &lt;SPAN style="font-family: andale\ mono, times;"&gt;PYTHONPATH&lt;/SPAN&gt; contains &lt;SPAN style="font-family: andale\ mono, times;"&gt;hostlist/python &lt;/SPAN&gt;just as it would when running under NSO (we can simulate that by making that our current directory). Let's see what happens if we try to import &lt;SPAN style="font-family: andale\ mono, times;"&gt;hostlist.main&lt;/SPAN&gt; (just as NSO does):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ cd hostlist/python&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ python3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt; import hostlist.main&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;Traceback (most recent call last):&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; File "/tmp/hostlist/python/hostlist/main.py", line 1, in &amp;lt;module&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;ImportError: No module named 'ext'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's trying to find &lt;SPAN style="font-family: andale\ mono, times;"&gt;ext&lt;/SPAN&gt; somewhere in &lt;SPAN style="font-family: andale\ mono, times;"&gt;PYTHONPATH&lt;/SPAN&gt; without success. It did work with Python 2.7, but with Python 3 we explicitly need to tell it to do an import relative to the current module (&lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt;). So let's change our &lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt; to this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; from &lt;STRONG&gt;.&lt;/STRONG&gt; ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Let's see what happens now:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ python3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt; import hostlist.main&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;And there you have you answer. Good Luck!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;/Tomas&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 16 May 2018 12:58:41 GMT</pubDate>
    <dc:creator>tbjurman</dc:creator>
    <dc:date>2018-05-16T12:58:41Z</dc:date>
    <item>
      <title>NSO python3 inheritance error - ImportError: No module named</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/nso-python3-inheritance-error-importerror-no-module-named/m-p/3454483#M481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I put all my most used helper scripts in "/var/opt/ncs/ext".&lt;SPAN style="font-size: 10pt;"&gt;For services who need those external scripts i make symlink in service python folder. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rain@ohoo:/var/opt/ncs/devstuff/hostlist/python/hostlist$ ll&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lrwxrwxrwx 1 root ncsadmin&amp;nbsp;&amp;nbsp; 16 mai&amp;nbsp;&amp;nbsp; 15 17:02 ext -&amp;gt; /var/opt/ncs/ext&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -rw-rwxr-- 1 root ncsadmin&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 mai&amp;nbsp;&amp;nbsp; 14 00:22 __init__.py&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -rw-rwxr-- 1 root ncsadmin 6030 mai&amp;nbsp;&amp;nbsp; 15 21:42 main.py&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Inside main.py I just import necessary module from that folder.&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thus far I've used default python 2.7.something and this solution has worked adequately. But i'm tired of working around python problems (last one was that enum implementation sucks), so i tried to switch NSO to python3. I did this: &lt;A href="https://community.cisco.com/migration-blogpost/9125" target="_blank"&gt;NSO: Running Python code with a different python version&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now with python3 NSO is not able to pick up those symlinks actually its not able to import anything from ".../python/hostlist" folder,:&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;&amp;lt;INFO&amp;gt; 15-May-2018::22:12:52.441 hostlist MainThread: - Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609]&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;lt;INFO&amp;gt; 15-May-2018::22:12:52.441 hostlist MainThread: - Starting...&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;lt;INFO&amp;gt; 15-May-2018::22:12:52.454 hostlist MainThread: - Started&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;lt;ERROR&amp;gt; 15-May-2018::22:12:52.569 hostlist MainThread: - Traceback (most recent call last):&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp; File "/opt/ncs/ncs-4.6.1/src/ncs/pyapi/ncs_pyvm/startup.py", line 246, in start_components&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pname=pname, cname=cname, main_q=self.msg_sink)&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp; File "/opt/ncs/ncs-4.6.1/src/ncs/pyapi/ncs_pyvm/ncsthreads.py", line 153, in __init__&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mod = __import__(modname)&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp; File "/var/opt/ncs/state/packages-in-use/3/hostlist/python/hostlist/main.py", line 10, in &amp;lt;module&amp;gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;ImportError: No module named 'ext'&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not a python programmer, NSO is my second project where I do some python, so i made test folder and this inheritance thingy works with python3 just fine outside of NSO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;&lt;STRONG&gt;rain@ohoo:~/project/tmp/1$ ll&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;-rw-rw-r-- 1 rain rain&amp;nbsp;&amp;nbsp; 98 mai&amp;nbsp;&amp;nbsp; 15 22:16 123.py&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;lrwxrwxrwx 1 rain rain&amp;nbsp;&amp;nbsp; 16 mai&amp;nbsp;&amp;nbsp; 15 21:19 ext -&amp;gt; /var/opt/ncs/ext&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&lt;STRONG&gt;rain@ohoo:~/project/tmp/1$ cat 123.py &lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;from ext.newhostlist import Newhostlist&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;obj=Newhostlist()&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;print(obj.find_sr('kjj-mgw1','vpnsr'))&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;&lt;STRONG&gt;rain@ohoo:~/project/tmp/1$ python3 123.py &lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;noe-sr1&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;I did this python3 switch on my own laptop NSO. I also have test NSO server with python2.7 so i compared "sys.path" variables, but as far as I can see they are mostly same:&lt;/P&gt;&lt;P&gt;NSO server with python 2.7 - print(sys.path):&lt;/P&gt;&lt;P&gt;&lt;EM style=": ; font-size: 8pt;"&gt;['/opt/ncs/ncs-4.5.2/src/ncs/pyapi/ncs_pyvm'&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/opt/ncs/ncs-4.5.2/src/ncs/pyapi'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/var/opt/ncs/state/packages-in-use/2/hostlist/python'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python2.7'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python2.7/plat-x86_64-linux-gnu'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python2.7/lib-tk'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python2.7/lib-old'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python2.7/lib-dynload'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/local/lib/python2.7/dist-packages'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style=": ; font-size: 8pt;"&gt;'/usr/lib/python2.7/dist-packages']&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My laptop with python 3 NSO - print(sys.path):&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;['/opt/ncs/ncs-4.6.1/src/ncs/pyapi/ncs_pyvm'&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/opt/ncs/ncs-4.6.1/src/ncs/pyapi'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/var/opt/ncs/state/packages-in-use/3/hostlist/python'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python35.zip'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python3.5'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python3.5/plat-x86_64-linux-gnu'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/lib/python3.5/lib-dynload'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&lt;EM&gt;'/usr/local/lib/python3.5/dist-packages'&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;'/usr/lib/python3/dist-packages']&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="font-size: 8pt;"&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt;"&gt;What else is wrong?&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Mar 2019 12:10:14 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/nso-python3-inheritance-error-importerror-no-module-named/m-p/3454483#M481</guid>
      <dc:creator>rainnomm56</dc:creator>
      <dc:date>2019-03-01T12:10:14Z</dc:date>
    </item>
    <item>
      <title>Re: NSO python3 inheritance error - ImportError: No module named</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/nso-python3-inheritance-error-importerror-no-module-named/m-p/3454484#M482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Rain.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem here is not related to running under NSO (well, yes, indirectly) and has nothing to do with symbolic links.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Python 3 has a completely new module import system which need some special treatment. If we have a structure like this (trying to mimic yours):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; hostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; └── python&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── hostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── ext&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp; ├── __init__.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp; └── newhostlist.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── __init__.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── main.py&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt; looks like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, suppose our &lt;SPAN style="font-family: andale\ mono, times;"&gt;PYTHONPATH&lt;/SPAN&gt; contains &lt;SPAN style="font-family: andale\ mono, times;"&gt;hostlist/python &lt;/SPAN&gt;just as it would when running under NSO (we can simulate that by making that our current directory). Let's see what happens if we try to import &lt;SPAN style="font-family: andale\ mono, times;"&gt;hostlist.main&lt;/SPAN&gt; (just as NSO does):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ cd hostlist/python&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ python3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt; import hostlist.main&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;Traceback (most recent call last):&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; File "/tmp/hostlist/python/hostlist/main.py", line 1, in &amp;lt;module&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;ImportError: No module named 'ext'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's trying to find &lt;SPAN style="font-family: andale\ mono, times;"&gt;ext&lt;/SPAN&gt; somewhere in &lt;SPAN style="font-family: andale\ mono, times;"&gt;PYTHONPATH&lt;/SPAN&gt; without success. It did work with Python 2.7, but with Python 3 we explicitly need to tell it to do an import relative to the current module (&lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt;). So let's change our &lt;SPAN style="font-family: andale\ mono, times;"&gt;main.py&lt;/SPAN&gt; to this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;nbsp; from &lt;STRONG&gt;.&lt;/STRONG&gt; ext.newhostlist import Newhostlist&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Let's see what happens now:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;$ python3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: andale\ mono, times;"&gt;&amp;gt;&amp;gt;&amp;gt; import hostlist.main&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;And there you have you answer. Good Luck!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;/Tomas&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 May 2018 12:58:41 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/nso-python3-inheritance-error-importerror-no-module-named/m-p/3454484#M482</guid>
      <dc:creator>tbjurman</dc:creator>
      <dc:date>2018-05-16T12:58:41Z</dc:date>
    </item>
  </channel>
</rss>

