Мой собственный пакет python - проблема с путем к модели

Я опубликовал пакет python на pypi.org, структура выглядит следующим образом:

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

В predict.py у меня есть функция, которая загружает модель:

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

Когда я пытаюсь использовать пакет:

from my_package.predict import my_function

my_function()

Я получаю ошибку, что он не видит модель:

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)

Я также пробовал:

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

не могу определить правильный путь

🤔 А знаете ли вы, что...
Python поддерживает динамическую типизацию, что облегчает разработку.


1
60
1

Ответ:

Решено

Решение состояло в том, чтобы использовать importlib.resources в 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

и вместо:

net.load_model('saved_models/november_model')

Я использовал:

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