Я опубликовал пакет 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 поддерживает динамическую типизацию, что облегчает разработку.
Решение состояло в том, чтобы использовать 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)