jesse-ai / jesse

An advanced crypto trading bot written in Python

Home Page:https://jesse.trade

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Issue during installation on Ubuntu Server 22.04

NicoSan20 opened this issue · comments

Issue during installation with pip install jesse, TA-Lib library fails to compile (see below). I also tested it on a freshly installed server

Building wheels for collected packages: TA-Lib
  Building wheel for TA-Lib (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for TA-Lib (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [94 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-311
      creating build/lib.linux-x86_64-cpython-311/talib
      copying talib/__init__.py -> build/lib.linux-x86_64-cpython-311/talib
      copying talib/stream.py -> build/lib.linux-x86_64-cpython-311/talib
      copying talib/abstract.py -> build/lib.linux-x86_64-cpython-311/talib
      copying talib/deprecated.py -> build/lib.linux-x86_64-cpython-311/talib
      running build_ext
      building 'talib._ta_lib' extension
      creating build/temp.linux-x86_64-cpython-311
      creating build/temp.linux-x86_64-cpython-311/talib
      x86_64-linux-gnu-gcc -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/usr/include -I/usr/local/include -I/opt/include -I/opt/local/include -I/opt/homebrew/include -I/opt/homebrew/opt/ta-lib/include -I/tmp/pip-build-env-d7efpqcq/normal/local/lib/python3.11/dist-packages/numpy/_core/include -I/usr/include/python3.11 -c talib/_ta_lib.c -o build/temp.linux-x86_64-cpython-311/talib/_ta_lib.o
      In file included from /tmp/pip-build-env-d7efpqcq/normal/local/lib/python3.11/dist-packages/numpy/_core/include/numpy/ndarraytypes.h:1909,
                       from /tmp/pip-build-env-d7efpqcq/normal/local/lib/python3.11/dist-packages/numpy/_core/include/numpy/ndarrayobject.h:12,
                       from /tmp/pip-build-env-d7efpqcq/normal/local/lib/python3.11/dist-packages/numpy/_core/include/numpy/arrayobject.h:5,
                       from talib/_ta_lib.c:1092:
      /tmp/pip-build-env-d7efpqcq/normal/local/lib/python3.11/dist-packages/numpy/_core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
         17 | #warning "Using deprecated NumPy API, disable it with " \
            |  ^~~~~~~
      In file included from /usr/include/python3.11/Python.h:38,
                       from talib/_ta_lib.c:16:
      talib/_ta_lib.c: In function ‘__pyx_f_5numpy_PyDataType_SHAPE’:
      talib/_ta_lib.c:10093:39: error: ‘PyArray_Descr’ {aka ‘struct _PyArray_Descr’} has no member named ‘subarray’
      10093 |     __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape));
            |                                       ^~
      /usr/include/python3.11/pyport.h:24:38: note: in definition of macro ‘_Py_CAST’
         24 | #define _Py_CAST(type, expr) ((type)(expr))
            |                                      ^~~~
      /usr/include/python3.11/object.h:506:35: note: in expansion of macro ‘_PyObject_CAST’
        506 | #  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
            |                                   ^~~~~~~~~~~~~~
      talib/_ta_lib.c:1527:27: note: in expansion of macro ‘Py_INCREF’
       1527 |   #define __Pyx_INCREF(r) Py_INCREF(r)
            |                           ^~~~~~~~~
      talib/_ta_lib.c:10093:5: note: in expansion of macro ‘__Pyx_INCREF’
      10093 |     __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape));
            |     ^~~~~~~~~~~~
      talib/_ta_lib.c:10094:36: error: ‘PyArray_Descr’ {aka ‘struct _PyArray_Descr’} has no member named ‘subarray’
      10094 |     __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape);
            |                                    ^~
      talib/_ta_lib.c: In function ‘__pyx_pf_5talib_7_ta_lib_348_ta_getFuncInfo’:
      talib/_ta_lib.c:51556:48: warning: passing argument 2 of ‘TA_GetFuncInfo’ from incompatible pointer type [-Wincompatible-pointer-types]
      51556 |   __pyx_v_retCode = TA_GetFuncInfo(__pyx_t_1, (&__pyx_v_info));
            |                                               ~^~~~~~~~~~~~~~
            |                                                |
            |                                                TA_FuncInfo **
      In file included from talib/_ta_lib.c:1084:
      /usr/include/ta-lib/ta_abstract.h:211:48: note: expected ‘const TA_FuncInfo **’ but argument is of type ‘TA_FuncInfo **’
        211 |                            const TA_FuncInfo **funcInfo );
            |                            ~~~~~~~~~~~~~~~~~~~~^~~~~~~~
      talib/_ta_lib.c: In function ‘__pyx_pf_5talib_7_ta_lib_350_ta_getInputParameterInfo’:
      talib/_ta_lib.c:51832:71: warning: passing argument 3 of ‘TA_GetInputParameterInfo’ from incompatible pointer type [-Wincompatible-pointer-types]
      51832 |   __pyx_v_retCode = TA_GetInputParameterInfo(__pyx_t_1, __pyx_v_idx, (&__pyx_v_info));
            |                                                                      ~^~~~~~~~~~~~~~
            |                                                                       |
            |                                                                       TA_InputParameterInfo **
      In file included from talib/_ta_lib.c:1084:
      /usr/include/ta-lib/ta_abstract.h:442:68: note: expected ‘const TA_InputParameterInfo **’ but argument is of type ‘TA_InputParameterInfo **’
        442 |                                      const TA_InputParameterInfo **info );
            |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
      talib/_ta_lib.c: In function ‘__pyx_pf_5talib_7_ta_lib_352_ta_getOptInputParameterInfo’:
      talib/_ta_lib.c:52084:74: warning: passing argument 3 of ‘TA_GetOptInputParameterInfo’ from incompatible pointer type [-Wincompatible-pointer-types]
      52084 |   __pyx_v_retCode = TA_GetOptInputParameterInfo(__pyx_t_1, __pyx_v_idx, (&__pyx_v_info));
            |                                                                         ~^~~~~~~~~~~~~~
            |                                                                          |
            |                                                                          TA_OptInputParameterInfo **
      In file included from talib/_ta_lib.c:1084:
      /usr/include/ta-lib/ta_abstract.h:446:74: note: expected ‘const TA_OptInputParameterInfo **’ but argument is of type ‘TA_OptInputParameterInfo **’
        446 |                                         const TA_OptInputParameterInfo **info );
            |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
      talib/_ta_lib.c: In function ‘__pyx_pf_5talib_7_ta_lib_354_ta_getOutputParameterInfo’:
      talib/_ta_lib.c:52374:72: warning: passing argument 3 of ‘TA_GetOutputParameterInfo’ from incompatible pointer type [-Wincompatible-pointer-types]
      52374 |   __pyx_v_retCode = TA_GetOutputParameterInfo(__pyx_t_1, __pyx_v_idx, (&__pyx_v_info));
            |                                                                       ~^~~~~~~~~~~~~~
            |                                                                        |
            |                                                                        TA_OutputParameterInfo **
      In file included from talib/_ta_lib.c:1084:
      /usr/include/ta-lib/ta_abstract.h:450:70: note: expected ‘const TA_OutputParameterInfo **’ but argument is of type ‘TA_OutputParameterInfo **’
        450 |                                       const TA_OutputParameterInfo **info );
            |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
      talib/_ta_lib.c: In function ‘__pyx_f_5talib_7_ta_lib___ta_getFuncHandle’:
      talib/_ta_lib.c:53011:126: warning: passing argument 2 of ‘TA_GetFuncHandle’ from incompatible pointer type [-Wincompatible-pointer-types]
      53011 |   __pyx_t_1 = __pyx_f_5talib_7_ta_lib__ta_check_success(__pyx_n_s_TA_GetFuncHandle, TA_GetFuncHandle(__pyx_v_function_name, (&__pyx_v_handle)), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 772, __pyx_L1_error)
            |                                                                                                                             ~^~~~~~~~~~~~~~~~
            |                                                                                                                              |
            |                                                                                                                              TA_FuncHandle ** {aka unsigned int **}
      In file included from talib/_ta_lib.c:1084:
      /usr/include/ta-lib/ta_abstract.h:155:52: note: expected ‘const TA_FuncHandle **’ {aka ‘const unsigned int **’} but argument is of type ‘TA_FuncHandle **’ {aka ‘unsigned int **’}
        155 |                              const TA_FuncHandle **handle );
            |                              ~~~~~~~~~~~~~~~~~~~~~~^~~~~~
      error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for TA-Lib
Failed to build TA-Lib
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (TA-Lib)

I also have the same issue with your installation script. source <(curl -fsSL https://raw.githubusercontent.com/jesse-ai/stack-installer/master/ubuntu-22.04.sh)

Same too installing from the repository GitHub

git clone https://github.com/jesse-ai/jesse.git
cd jesse
pip install -e .

For information, the server has 4GB of memory.

Did you try using the script on a fresh VPS?
https://raw.githubusercontent.com/jesse-ai/stack-installer/master/ubuntu-22.04.sh

Because for Talib to work, you need to install some other stuff on your Linux machine before installing it with pip. Which you can find in the source code for the installation script.

@saleh-mir Thank you for your fast reply. I don't try on a VPS, but I tried also on a virtual machine freshly installed with Ubuntu Server 22.04, but still the same issue with Talib.

You're welcome. The issue is usually caused by gcc not being installed on the machine. The installation script is working on a fresh VPS from Hetzner. I tried it a few days ago myself. However, different machines may have varying configurations. If you search online, you'll find several options to try. Unfortunately, you have no choice but to experiment with them to see which one works. The problem is typically related to GCC not being properly installed or recognized by Talib. Sometimes, you install GCC, but Talib cannot find it, and you need to specify its path inside your bash_rc file or the tool you're using instead of Bash.

Alternatively, you can use Docker. If I understand it correctly, your operating system is Linux anyway. So using Docker, I don't think you will get performance hit. So that's probably the easiest option.

@saleh-mir Thanks again for your reply. It seems I'm not the only one, someone else has the same problem (jesse-ai/stack-installer#12)

Yes, I had missed that one. If you're running through virtualization, can you also try the other installation script?

https://github.com/jesse-ai/stack-installer/blob/master/ubuntu-20.04.sh

@saleh-mir As requested, I tried with the script Ubuntu 20.04 (Python 3.8) on my Ubuntu Server 22.04, but same issue,

I also tested on a VPS (not at Hetzner) and saddly the same issue too.

If I can avoid Docker, I'd be happy,

I will try it on a new VPS myself to see if I can reproduce it. Maybe some source has changed something since the last time I tried, causing the issue if you say it also exists on a VPS.

I'm getting it on a new VPS as well. There must be an issue with one of the sources I'm using. I'll look into it, thanks for letting me know. In the meantime, please consider using Docker.

Fixed it. Please use the updated script using the same link and also install the latest version, which is 0.48.6.

@saleh-mir Thank you very much for the fast resolution of this issue. Appreciate it.