Building wheel for TA-Lib (setup.py) ... error / ERROR: Failed building wheel for TA-Lib

Ubuntu18.04
正常的可以Building wheels for collected packages: TA-Lib,所以問題原因:沒有wheel for TA-Lib ,網上的大部分都是介紹Windows的wheel,可能是Windows容易出現這問題,但我的是自己找的Linux新版本,可能缺很多包,包括wheel。如果你覺得某些步驟不需要請能告訴我,因爲有些步驟可能是沒必要,是爲應對當時情況做測試。反正沒壞處。

(dm) hellopython@ubuntu:~$ pip install TA-Lib
Collecting TA-Lib
  Using cached https://files.pythonhosted.org/packages/90/05/d4c6a778d7a7de0be366bc4a850b4ffaeac2abad927f95fa8ba6f355a082/TA-Lib-0.4.17.tar.gz
Requirement already satisfied: numpy in ./.virtualenvs/dm/lib/python3.6/site-packages (from TA-Lib) (1.14.2)
Building wheels for collected packages: TA-Lib
  Building wheel for TA-Lib (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/hellopython/.virtualenvs/dm/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-tu131bdx --python-tag cp36
       cwd: /tmp/pip-install-2wb288y3/TA-Lib/
  Complete output (25 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.6
  creating build/lib.linux-x86_64-3.6/talib
  copying talib/abstract.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/test_data.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/deprecated.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/stream.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/test_abstract.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/test_pandas.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/__init__.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/test_func.py -> build/lib.linux-x86_64-3.6/talib
  copying talib/test_stream.py -> build/lib.linux-x86_64-3.6/talib
  running build_ext
  building 'talib._ta_lib' extension
  creating build/temp.linux-x86_64-3.6
  creating build/temp.linux-x86_64-3.6/talib
  x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/hellopython/.virtualenvs/dm/lib/python3.6/site-packages/numpy/core/include -I/usr/include -I/usr/local/include -I/opt/include -I/opt/local/include -I/usr/include/python3.6m -I/home/hellopython/.virtualenvs/dm/include/python3.6m -c talib/_ta_lib.c -o build/temp.linux-x86_64-3.6/talib/_ta_lib.o
  talib/_ta_lib.c:4:10: fatal error: Python.h: No such file or directory
   #include "Python.h"
            ^~~~~~~~~~
  compilation terminated.
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for TA-Lib
  Running setup.py clean for TA-Lib
Failed to build TA-Lib
Installing collected packages: TA-Lib
    Running setup.py install for TA-Lib ... error
    ERROR: Command errored out with exit status 1:
     command: /home/hellopython/.virtualenvs/dm/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-aibubswe/install-record.txt --single-version-externally-managed --compile --install-headers /home/hellopython/.virtualenvs/dm/include/site/python3.6/TA-Lib
         cwd: /tmp/pip-install-2wb288y3/TA-Lib/
    Complete output (25 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.6
    creating build/lib.linux-x86_64-3.6/talib
    copying talib/abstract.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/test_data.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/deprecated.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/stream.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/test_abstract.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/test_pandas.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/__init__.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/test_func.py -> build/lib.linux-x86_64-3.6/talib
    copying talib/test_stream.py -> build/lib.linux-x86_64-3.6/talib
    running build_ext
    building 'talib._ta_lib' extension
    creating build/temp.linux-x86_64-3.6
    creating build/temp.linux-x86_64-3.6/talib
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/hellopython/.virtualenvs/dm/lib/python3.6/site-packages/numpy/core/include -I/usr/include -I/usr/local/include -I/opt/include -I/opt/local/include -I/usr/include/python3.6m -I/home/hellopython/.virtualenvs/dm/include/python3.6m -c talib/_ta_lib.c -o build/temp.linux-x86_64-3.6/talib/_ta_lib.o
    talib/_ta_lib.c:4:10: fatal error: Python.h: No such file or directory
     #include "Python.h"
              ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/hellopython/.virtualenvs/dm/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-2wb288y3/TA-Lib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-aibubswe/install-record.txt --single-version-externally-managed --compile --install-headers /home/hellopython/.virtualenvs/dm/include/site/python3.6/TA-Lib Check the logs for full command output.

參考:https://blog.csdn.net/qq_41672744/article/details/87774853
我已經把 sudo apt-get install libssl-dev libffi-dev python-dev build-essential libxml2-dev libxslt1-dev 搞定後再做如下:

(dm) hellopython@ubuntu:~$ sudo apt-get install libssl-dev libffi-dev python-dev build-essential libxml2-dev libxslt1-dev
.......省略。

(dm) hellopython@ubuntu:~$ sudo pip install TA-Lib
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

(dm) hellopython@ubuntu:~$ sudo gedit /usr/bin/pip

在打開的文本中把原本的3行代碼註釋掉,粘貼上新的3行內容後關閉文本,如下:

#from pip import main
#if __name__ == '__main__':
#   sys.exit(main())

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

參考:http://www.mamicode.com/info-detail-2669962.html

(dm) hellopython@ubuntu:~$ sudo pip install TA-Lib
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
WARNING: The directory '/home/hellopython/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
WARNING: The directory '/home/hellopython/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting TA-Lib
  Downloading https://files.pythonhosted.org/packages/90/05/d4c6a778d7a7de0be366bc4a850b4ffaeac2abad927f95fa8ba6f355a082/TA-Lib-0.4.17.tar.gz (717kB)
     |████████████████████████████████| 727kB 405kB/s 
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/d7/b1/3367ea1f372957f97a6752ec725b87886e12af1415216feec9067e31df70/numpy-1.16.5-cp27-cp27mu-manylinux1_x86_64.whl (17.0MB)
     |████████████████████████████████| 17.0MB 4.6MB/s 
Building wheels for collected packages: TA-Lib
  Building wheel for TA-Lib (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-HwVNMe/TA-Lib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-HwVNMe/TA-Lib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-VYFZsS --python-tag cp27
       cwd: /tmp/pip-install-HwVNMe/TA-Lib/
  Complete output (5 lines):
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-HwVNMe/TA-Lib/setup.py", line 62, in <module>
      import numpy
  ImportError: No module named numpy
  ----------------------------------------
  ERROR: Failed building wheel for TA-Lib
  Running setup.py clean for TA-Lib
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-HwVNMe/TA-Lib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-HwVNMe/TA-Lib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' clean --all
       cwd: /tmp/pip-install-HwVNMe/TA-Lib
  Complete output (5 lines):
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-install-HwVNMe/TA-Lib/setup.py", line 62, in <module>
      import numpy
  ImportError: No module named numpy
  ----------------------------------------
  ERROR: Failed cleaning build dir for TA-Lib
Failed to build TA-Lib
Installing collected packages: numpy, TA-Lib
    Running setup.py install for TA-Lib ... done
Successfully installed TA-Lib-0.4.17 numpy-1.16.5

hellopython@ubuntu:/usr/local/bin$ pip3 install wheel
Collecting wheel
  Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Installing collected packages: wheel
Successfully installed wheel-0.33.6

hellopython@ubuntu:/usr/local/bin$ pip3 install TA-Lib
Collecting TA-Lib
  Using cached https://files.pythonhosted.org/packages/90/05/d4c6a778d7a7de0be366bc4a850b4ffaeac2abad927f95fa8ba6f355a082/TA-Lib-0.4.17.tar.gz
Collecting numpy (from TA-Lib)
  Using cached https://files.pythonhosted.org/packages/d2/ab/43e678759326f728de861edbef34b8e2ad1b1490505f20e0d1f0716c3bf4/numpy-1.17.4-cp36-cp36m-manylinux1_x86_64.whl
Building wheels for collected packages: TA-Lib
  Running setup.py bdist_wheel for TA-Lib ... done
  Stored in directory: /home/hellopython/.cache/pip/wheels/2a/2e/ec/71c565b2e0091e03a2b56abfbfd062f14a01a8d7b20ffe8bd5
Successfully built TA-Lib
Installing collected packages: numpy, TA-Lib
Successfully installed TA-Lib-0.4.17 numpy-1.17.4

hellopython@ubuntu:/usr/local/bin$ sudo apt-get install python3-pip python3-setuptools python3-dev python3-wheel
[sudo] password for hellopython: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3-setuptools is already the newest version (39.0.1-2).
python3-wheel is already the newest version (0.30.0-0.2).
python3-wheel set to manually installed.
python3-dev is already the newest version (3.6.7-1~18.04).
python3-pip is already the newest version (9.0.1-2.3~ubuntu1.18.04.1).
0 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
hellopython@ubuntu:/usr/local/bin$ pip install TA-Lib
Collecting TA-Lib
Collecting numpy (from TA-Lib)
  Using cached https://files.pythonhosted.org/packages/d2/ab/43e678759326f728de861edbef34b8e2ad1b1490505f20e0d1f0716c3bf4/numpy-1.17.4-cp36-cp36m-manylinux1_x86_64.whl
Installing collected packages: numpy, TA-Lib
Successfully installed TA-Lib-0.4.17 numpy-1.17.4

hellopython@ubuntu:~$ ls -a
Documents         .profile                         .virtualenvs
......
hellopython@ubuntu:~$ cd .virtualenvs/
hellopython@ubuntu:~/.virtualenvs$ ls
dm               postdeactivate    preactivate      prermvirtualenv
get_env_details  postmkproject     predeactivate
initialize       postmkvirtualenv  premkproject
postactivate     postrmvirtualenv  premkvirtualenv
hellopython@ubuntu:~/.virtualenvs$ source dm/bin/activate
(dm) hellopython@ubuntu:~/.virtualenvs/dm/bin$ pip3 install TA-Lib
Processing /home/hellopython/.cache/pip/wheels/2a/2e/ec/71c565b2e0091e03a2b56abfbfd062f14a01a8d7b20ffe8bd5/TA_Lib-0.4.17-cp36-cp36m-linux_x86_64.whl
Requirement already satisfied: numpy in /home/hellopython/.virtualenvs/dm/lib/python3.6/site-packages (from TA-Lib) (1.14.2)
Installing collected packages: TA-Lib
Successfully installed TA-Lib-0.4.17

我在物理機中安裝了TA-Lib,所以dm虛擬機裏pip3 install TA-Lib 就不需安裝,引用就好,纔可在pip3 freeze中看到TA-Lib。

(dm) hellopython@ubuntu:~/.virtualenvs$ pip3 freeze
TA-Lib==0.4.17
......

sudo pip install TA-Lib 相比 pip install TA-Lib是有root權限來安裝的,即使報錯也會忽略,直到安裝成功,但是問題還在。我這系統默認用python2來安裝TA-Lib。pip3就用python3解釋器。

總結:該問題可能是因爲缺少wheel,所以pip3 install wheel,再不行sudo apt-get install python3-pip python3-setuptools python3-dev python3-wheel,期間遇到的其它問題參考上面,建議用pip3 install xxx而先別sudo pip3 install xxx, 畢竟最好把問題都修復好才安裝嘛,但是急用就選後者。

發佈了70 篇原創文章 · 獲贊 51 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章