У меня есть Python проект, который построен следующим образом:
├── process_folder
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_udf.py
│ │ └── test_process.py
│ ├── __init__.py
│ ├── process.py
│ └── udf.py
И process.py содержит from udf import *
Теперь, когда я запускаю test_udf.py, он успешно завершается - но когда я запускаю test_process.py, я получаю эту ошибку:
============================= test session starts =============================
platform win32 -- Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\Dev\Spark\process_folder\tests
test_process.py:None (test_process.py)
ImportError while importing test module 'C:\Dev\Spark\process_folder\tests\test_process.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_process.py:5: in <module>
from ..process import *
..\process.py:9: in <module>
from udf import *
E ModuleNotFoundError: No module named 'udf'
collected 0 items / 1 errors
=================================== ERRORS ====================================
__________________ ERROR collecting test_process.py __________________
ImportError while importing test module 'C:\Dev\Spark\process_folder\tests\test_process.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_process.py:5: in <module>
from ..process import *
..\process.py:9: in <module>
from udf import *
E ModuleNotFoundError: No module named 'udf'
Я не могу понять разницу между ними, и почему один работает, а другой нет (я думаю, что-то есть что касается папок, местоположений и того, откуда происходит мой импорт), я попробовал все виды решений, которые я нашел в Интернете (например, удалите файл __init__.py
), но не смог запустить тесты.
Правка - для меня работал абсолютный импорт, теперь process.py содержит:
sys.path.insert(0, "./")
from udf import *
И теперь я могу запускать тесты локально, и тот же код выполняется на сервере без сбоев.
Спасибо!