在Python 3.7中安装TA-Lib出现问题

16

我正在尝试为Python 3.7安装TA-Lib。我已经阅读了许多解决方案,但现在遇到了一个无法解决的问题。以下是我从pip获得的消息:

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 c:\python37_64\lib\site-packages (from ta-lib) (1.15.4)
Installing collected packages: ta-lib
  Running setup.py install for ta-lib: started
Command "c:\python37_64\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\Todd\\AppData\\Local\\Temp\\pip-install-0c2__0gf\\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 C:\Users\Todd\AppData\Local\Temp\pip-record-3dpfanca\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\Todd\AppData\Local\Temp\pip-install-0c2__0gf\ta-lib\
    Running setup.py install for ta-lib: finished with status 'error'
    Complete output from command c:\python37_64\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\Todd\\AppData\\Local\\Temp\\pip-install-0c2__0gf\\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 C:\Users\Todd\AppData\Local\Temp\pip-record-3dpfanca\install-record.txt --single-version-externally-managed --compile:
    C:\Users\Todd\AppData\Local\Temp\pip-install-0c2__0gf\ta-lib\setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail.
      warnings.warn('Cannot find ta-lib library, installation may fail.')
    running install
    running build
    running build_py
    creating build
    creating build\lib.win-amd64-3.7
    creating build\lib.win-amd64-3.7\talib
    copying talib\abstract.py -> build\lib.win-amd64-3.7\talib
    copying talib\deprecated.py -> build\lib.win-amd64-3.7\talib
    copying talib\stream.py -> build\lib.win-amd64-3.7\talib
    copying talib\test_abstract.py -> build\lib.win-amd64-3.7\talib
    copying talib\test_data.py -> build\lib.win-amd64-3.7\talib
    copying talib\test_func.py -> build\lib.win-amd64-3.7\talib
    copying talib\test_pandas.py -> build\lib.win-amd64-3.7\talib
    copying talib\test_stream.py -> build\lib.win-amd64-3.7\talib
    copying talib\__init__.py -> build\lib.win-amd64-3.7\talib
    running build_ext
    building 'talib._ta_lib' extension
    creating build\temp.win-amd64-3.7
    creating build\temp.win-amd64-3.7\Release
    creating build\temp.win-amd64-3.7\Release\talib
    C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Ic:\python37_64\lib\site-packages\numpy\core\include -Ic:\ta-lib\c\include -Ic:\python37_64\include -Ic:\python37_64\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tctalib/_ta_lib.c /Fobuild\temp.win-amd64-3.7\Release\talib/_ta_lib.obj
    _ta_lib.c
    talib/_ta_lib.c(524): fatal error C1083: Cannot open include file: 'ta_libc.h': No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2

    ----------------------------------------
FINISHED
谢谢。
5个回答

18

这是我使用的方法...

此处下载TA_Lib-0.4.10-cp27-cp27m-win_amd64.whl文件,并使用命令pip install TA_Lib-0.4.10-cp27-cp27m-win_amd64.whl

我使用的是Python 3.6 64位版本的Conda4。

另外一种方法如下:

为了在Python 3.6 +,Windows 64位上安装Ta-Lib,请使用以下命令:pip install -i https://pypi.anaconda.org/masdeseiscaracteres/simple ta-lib


1
很少有提示,这并不明显 - cp27文件适用于Python 2.7,而我现在使用的是3.8,所以我必须寻找cp38文件。然后在您的下载目录中执行命令。哦,顺便说一下,之后我不得不重新安装numpy,因为存在版本不兼容问题,所以也要考虑这个问题。 - Onsightfree
1
请注意,此解决方案仅适用于Windows用户(如OP)。 - Pranab

8
错误的根本原因可能是您没有安装 TA-Lib 库,实际上 TA-Lib 是用 C 写的。请注意,Python 库只是实际库的包装器。因此,为了成功安装 Python 包装器,您需要安装其前置条件(即实际的 TA-Lib 库)。
请参见 https://github.com/mrjbq7/ta-lib#dependencies 以获取更多详细信息。
从上面的参考资料中(为了方便访问):
安装实际的 TA-Lib(Python 包装器的前置条件):
Windows
1. 下载 ta-lib-0.4.0-msvc.zip 并解压到 C:\ta-lib。 2. 将解压后的文件夹 ta-lib 移动到 C:\。 3. 如果尚未安装 Visual Studio Community 2015,请下载并安装 (记得选择 [Visual C++] 功能)。 4. 打开 x64 Native Tools 命令提示符。 5. 切换到 C:\ta-lib\c\make\cdr\win32\msvc。 6. 输入 nmake(此命令构建库)。
Linux
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install

Mac OS X

$ brew install ta-lib

如果您使用的是M1笔记本电脑和Homebrew,则可以在安装之前进行以下设置:
export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include"
export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib"
提示:默认情况下,setup.py会从C:\ta-lib(Windows)和/usr(Linux)读取实际的库文件。因此,如果您将下载的zip文件移动到另一个位置并在那里解压缩(对于Windows),或者将./configure --prefix设置为任何位置而不是/usr(对于Linux),那么您需要将TA_LIBRARY_PATHTA_INCLUDE_PATH环境变量设置为所需的位置,才能找到库文件和包含文件。

如果您使用自定义前缀(例如,使用./configure --prefix=$PREFIX)安装了底层的TA-Lib库,则在安装此Python包装器时,您可以使用TA_LIBRARY_PATH和TA_INCLUDE_PATH环境变量指定其他搜索路径,以查找底层的TA-Lib库的库文件和包含文件:

$ export TA_LIBRARY_PATH=$PREFIX/lib
$ export TA_INCLUDE_PATH=$PREFIX/include
$ python setup.py install # or pip install ta-lib

可能会被忽略的最重要的一点(就像我一样)是:在所有这些步骤中保持相同的虚拟环境(Python v等)。在同一个虚拟环境中安装C库和包装器。 - ses

3
这里的Ta-lib软件包文档非常清晰:

https://github.com/mrjbq7/ta-lib

https://mrjbq7.github.io/ta-lib/

正如明确提到的那样!这个Python Ta-Lib库是https://ta-lib.org/上TaLib库的封装。

这是一个基于Cython而不是SWIG的TA-LIB的Python封装

要了解ta-lib.org库,它是用c语言创建的库!您可以在here检查。

对于不同的语言,制作了多个绑定和接口!就像官方网站上所提到的一样!

Python库是使用cython的python绑定!这使得它比SWIG更有效率!

请注意,我会坚持使用pip!(它运行良好且方便)

为了安装顺利进行!您需要分两步进行!您需要先安装TaLib本地库二进制文件!然后使用pip(再次使用pip)安装python lib!这个顺序是必要的!您不能在第一次安装完成之前安装python绑定!

所有这些都说了!
安装
第一步:安装Talib本地二进制文件
安装Ta-lib软件(或本地库二进制文件)是必须的!而且需要首先完成!
按照这里的说明操作:

https://github.com/mrjbq7/ta-lib#dependencies

指示非常清晰和详细!
(Linux用户需要使用sudo命令以正确的权限执行命令)
最后一件事!您可以在此线程中检查@Code_Worm的答案here,他对上面的说明进行了很好的解释!
我也会指出他的提示:
提示:默认情况下,setup.py从C:\ ta-lib(在Windows中)和/ usr(在Linux中)读取实际库文件。因此,如果将下载的zip文件移动到另一个位置并在那里提取它(对于Windows),或者将./configure --prefix设置为除/ usr之外的任何位置(对于Linux),则必须将TA_LIBRARY_PATH和TA_INCLUDE_PATH环境变量设置为所需的位置。
检查此提示下面的部分!
您可以在此处检查疑难解答部分here 第二步:使用pip安装python库
在第一步成功完成并完成之前,请勿继续执行此步骤!
再次说明pip软件包和pip工具很好用!因此不需要使用来自其他网站的任何whl文件或src!我会向你展示如何做到这一点!
pip install TA-Lib

然而,这里有很多事情要说!
首先,您需要使用Python 3
因此,如果pip解析为Python 2版本(在Linux安装中很常见),则可以使用pip3代替pip
pip3 install TA-Lib

现在您可能会遇到这个问题和错误!
unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
AttributeError: 'HTMLParser' object has no attribute 'unescape'

如果是这种情况!这可能是 Python 3.9 的一个问题!(如果你使用的是 3.8,你可能根本不会遇到这个问题)!
解决方案和修复很简单!我们只需要升级一些包!你可以按照这里的答案中的说明进行操作:

https://dev59.com/SFEG5IYBdhLWcg3wduYf#65640477

经过一些尝试,我升级了pip、distlib和setuptools并解决了问题。不确定是哪个引起了这个问题。(在最后两个链接中,我发现其他网站上有类似的问题1 2)这是由于Python3.9中从HTMLParser中删除了unescape导致的,似乎会破坏setuptools。
pip3 install --upgrade setuptools

如果它不起作用,也可以尝试:
pip3 install --upgrade pip
pip3 install --upgrade distlib

这就是全部了!如果第一步(步骤1:安装TaLib本地二进制文件)已经完成得很好!那么运行pip3 install TA-Lib这次会很顺利!
对于Linux用户!如果你用sudo运行它!而且失败了!不要使用sudo!你不应该这样做!
对于Linux用户,您可能需要安装Python头文件。
sudo apt-get install python3-dev

你只有在它没有起作用的情况下才能尝试!在大多数 Linux 发行版中,你将默认情况下是可以的!

最后(故障排除文档部分)

如果需要,请检查故障排除部分此处


好的回答!它对我帮助很大!但是这个答案有点难以理解!感叹号用了太多了!;-) - adelriosantiago

3

如果您没有安装过TA-lib本地库(如在此处所述),并且已经先安装了Python ta-lib,则可以使用以下命令重新安装TA-lib:pip install --upgrade --force-reinstall TA-lib。


1
我建议使用这里的wheel进行安装。最近,当我尝试升级库时,遇到了相同的问题,这是另一件你不想做的事情。 希望这可以帮到你。祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接