nbdev icon indicating copy to clipboard operation
nbdev copied to clipboard

import_module fails when running nbdev_update in new nbdev project.

Open LinuxIsCool opened this issue 3 years ago • 0 comments

This is caused when running nbdev_update in a new project called nbdev-blog.

---------------------------------------------------------------------------              
ModuleNotFoundError                       Traceback (most recent call last)              
Cell In[4], line 1                                                                       
----> 1 midx = import_module(f'{get_config().lib_name}._modidx')                         
                                                                                         
File /usr/lib/python3.10/importlib/__init__.py:126, in import_module(name, package)      
    124             break                                                                
    125         level += 1                                                               
--> 126 return _bootstrap._gcd_import(name[level:], package, level)                      
                                                                                         
File <frozen importlib._bootstrap>:1050, in _gcd_import(name, package, level)            
                                                                                         
File <frozen importlib._bootstrap>:1027, in _find_and_load(name, import_)                
                                                                                         
File <frozen importlib._bootstrap>:992, in _find_and_load_unlocked(name, import_)        
                                                                                         
File <frozen importlib._bootstrap>:241, in _call_with_frames_removed(f, *args, **kwds)   
                                                                                         
File <frozen importlib._bootstrap>:1050, in _gcd_import(name, package, level)            
                                                                                         
File <frozen importlib._bootstrap>:1027, in _find_and_load(name, import_)                
                                                                                         
File <frozen importlib._bootstrap>:1004, in _find_and_load_unlocked(name, import_)       
                                                                                         
ModuleNotFoundError: No module named 'nbdev-blog'                                        

Reproduced in REPL:

from importlib import import_module                      
                                                         
from nbdev.config import *                               
                                                         
cfg = get_config()                                       
                                                         
midx = import_module(f'{get_config().lib_name}._modidx') 

This can be fixed in 1 of 2 ways:

  1. Change the settings.ini default to change dashes to underscores in the default lib_name
### Python library ###
repo = nbdev-blog
lib_name = %(repo)s

I fixed this issue locally by changing the above to:

### Python library ###
repo = nbdev-blog
lib_name = nbdev_blog
  1. Change lib_name to lib_path in the sync.

This line: https://github.com/fastai/nbdev/blob/46d05d40fb8bfd1f6466f3daabc1fcf300a73fde/nbdev/sync.py#L33

Could be changed to:

midx = import_module(f'{get_config().lib_path}._modidx')

LinuxIsCool avatar Dec 02 '22 04:12 LinuxIsCool