polakowo / vectorbt

Find your trading edge, using the fastest engine for backtesting, algorithmic trading, and research.
https://vectorbt.dev
Other
4.28k stars 613 forks source link

RuntimeError cannot cache function when running container #476

Closed guhuajun closed 2 years ago

guhuajun commented 2 years ago

Greetings,

TL;DR: Don't forget to set NUMBA_CACHE_DIR (with proper permission) when playing with container.

I am using following dockerfile to build my application image.

FROM python:3.9-slim
ENV TZ=Asia/Shanghai
WORKDIR /app/
RUN groupadd -r app && useradd -r -g app app
COPY requirements.txt .
RUN pip install -r requirements.txt \
    --index-url https://pypi.tuna.tsinghua.edu.cn/simple/
USER app
CMD [ "python", "main.py" ]

After running docker-compose up -d, I got following error.

backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/generic/__init__.py", line 8, in <module>
backtesting_1  |     from vectorbt.generic.drawdowns import Drawdowns
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/generic/drawdowns.py", line 172, in <module>
backtesting_1  |     from vectorbt.base.array_wrapper import ArrayWrapper
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/base/__init__.py", line 6, in <module>
backtesting_1  |     from vectorbt.base.array_wrapper import ArrayWrapper
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/base/array_wrapper.py", line 94, in <module>
backtesting_1  |     from vectorbt.base import index_fns, reshape_fns
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/base/index_fns.py", line 16, in <module>
backtesting_1  |     from vectorbt.utils import checks
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/utils/__init__.py", line 10, in <module>
backtesting_1  |     from vectorbt.utils.random_ import set_seed
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/vectorbt/utils/random_.py", line 13, in <module>
backtesting_1  |     def set_seed_nb(seed: int) -> None:
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/numba/core/decorators.py", line 212, in wrapper
backtesting_1  |     disp.enable_caching()
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/numba/core/dispatcher.py", line 863, in enable_caching
backtesting_1  |     self._cache = FunctionCache(self.py_func)
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/numba/core/caching.py", line 613, in __init__
backtesting_1  |     self._impl = self._impl_class(py_func)
backtesting_1  |   File "/usr/local/lib/python3.9/site-packages/numba/core/caching.py", line 350, in __init__
backtesting_1  |     raise RuntimeError("cannot cache function %r: no locator available "
backtesting_1  | RuntimeError: cannot cache function 'set_seed_nb': no locator available for file '/usr/local/lib/python3.9/site-packages/vectorbt/utils/random_.py'

After digging around with search engine, I found following useful SO link and offical numba doc link. https://stackoverflow.com/questions/59290386/runtimeerror-at-cannot-cache-function-shear-dense-no-locator-available-fo https://numba.readthedocs.io/en/stable/reference/envvars.html#envvar-NUMBA_CACHE_DIR

Thanks, Greg

guhuajun commented 2 years ago

Close this issue with a working solution. Hope can save someone's time in the future.