Ошибка типа при запуске модели, обученной в Roboflow, в производственной среде

Я могу сделать выводы на основе своей обученной модели Roboflow с помощью Google Colab и тестовой среды AWS Cloud9.

Для этого я использовал следующий код:

from roboflow import Roboflow

rf = Roboflow(api_key = "xxxxxxxxxxxxxxxxx")
path = "/context/image.jpeg"
project = rf.workspace().project("xxxxxx")
model = project.version(x).model

# infer on a local image
currency_result= model.predict(path, confidence=40).json()```

Однако, когда я запустил его в производство, я получил следующую ошибку:

    [ERROR] TypeError: expected str, bytes or os.PathLike object, not NoneType
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/app.py", line 1, in <module>
    from roboflow import Roboflow
  File "/var/lang/lib/python3.8/site-packages/roboflow/__init__.py", line 10, in <module>
    from roboflow.adapters import rfapi
  File "/var/lang/lib/python3.8/site-packages/roboflow/adapters/rfapi.py", line 8, in <module>
    from roboflow.config import API_URL, DEFAULT_BATCH_NAME, DEFAULT_JOB_NAME
  File "/var/lang/lib/python3.8/site-packages/roboflow/config.py", line 51, in <module>
    API_URL = get_conditional_configuration_variable("API_URL", "https://api.roboflow.com")
  File "/var/lang/lib/python3.8/site-packages/roboflow/config.py", line 22, in get_conditional_configuration_variable
    default_path = os.path.join(os.getenv("HOME"), ".config/roboflow/config.json")
  File "/var/lang/lib/python3.8/posixpath.py", line 76, in join
    a = os.fspath(a)

Что мне показалось интересным, так это то, что мне удалось запустить код в cloud9 с помощью sam local invoke, но в производственной среде я получил вышеуказанную ошибку.

Может ли это быть из-за другой версии Python в вашей производственной среде и вашем экземпляре AWS Cloud9/Google Colab?

Alexandre_Bon 01.07.2024 09:22

У вас почему-то нет $HOME определения. Не могли бы вы подробно описать свою производственную среду, чтобы помочь мне понять, как ее исправить?

iurisilvio 02.07.2024 10:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как отметил @iurisilvio, попробуйте добавить переменную среды HOME в вашу лямбда-конфигурацию. Трассировка стека подсказывает вам, где находится ошибка: os.getenv("HOME") имеет значение «Нет», и, следовательно, os.path.join(os.getenv("HOME"), ".config/roboflow/config.json") приводит к ошибке. Ниже взято из python3.8.

>>> import os
>>> os.path.join(None, "foo")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/posixpath.py", line 76, in join
    a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType

Другие вопросы по теме