Search code examples
pythonpypi

my own python package - problem with path to model


I published python package on pypi.org structure looks like this:

/my_package_name-0.0.1
-- README LICENSE ETC..
-- /my_package_name
   -- __init__.py
   -- train_model.py
   -- predict.py
   -- /saved_models
      -- november_model

In predict.py I have function that loads model:

def my_function():
    (some code...)
    net.load_model('./saved_models/november_model')

When I'm trying to use the package:

from my_package.predict import my_function

my_function()

I get error that it can't see the model:

OSError: Unable to open file 
(unable to open file: name = './saved_models/november_model',
errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)

I tried also:

net.load_model('saved_models/november_model')
net.load_model('./saved_models/november_model')
net.load_model('../saved_models/november_model')

I can't figure out correct path


Solution

  • The solution was to use importlib.resources in predict.py:

    try:
        import importlib.resources as pkg_resources
    except ImportError:
        # Try backported to PY<37 `importlib_resources`.
        import importlib_resources as pkg_resources
    from my_package import saved_models
    

    and instead of:

    net.load_model('saved_models/november_model')
    

    I used:

    f = pkg_resources.open_text(saved_models, 'november_model')
    net.load_model(f.name)