Scikit-learn: `pip install` falha (erro de compilação) com Python 3.7rc1

Criado em 19 jun. 2018  ·  29Comentários  ·  Fonte: scikit-learn/scikit-learn

Descrição

Incapaz de pip install (erro de compilação: PyThreadState não tem membro ...) com Python 3.7rc1.

Minhas desculpas se isso foi relatado, mas não consegui encontrar nos problemas (fechado / aberto) nem em qualquer solicitação de pull para ele.

Houve problemas semelhantes com pyyaml ​​(yaml / pyyaml ​​# 126), numpy (numpy / numpy # 10500), cython (cython / cython # 1978) e pygame (pygame / pygame # 382).

Etapas / código para reproduzir

Instale o Python 3.7rc1.
pip install scikit-learn

resultados esperados

pip sucesso.

Resultados reais

Erros de compilação:

...
sklearn/cluster/_dbscan_inner.cpp: In function ‘int
__Pyx__GetException(PyThreadState*, PyObject**, PyObject**, PyObject**)’:

sklearn/cluster/_dbscan_inner.cpp:6029:24: error: ‘PyThreadState’ has no member named ‘exc_type’
     tmp_type = tstate->exc_type;
                        ^
sklearn/cluster/_dbscan_inner.cpp:6030:25: error: ‘PyThreadState’ has no member named ‘exc_value’
     tmp_value = tstate->exc_value;
                         ^
sklearn/cluster/_dbscan_inner.cpp:6031:22: error: ‘PyThreadState’ has no member named ‘exc_traceback’
     tmp_tb = tstate->exc_traceback;
                      ^
sklearn/cluster/_dbscan_inner.cpp:6032:13: error: ‘PyThreadState’ has no member named ‘exc_type’
     tstate->exc_type = local_type;
             ^
sklearn/cluster/_dbscan_inner.cpp:6033:13: error: ‘PyThreadState’ has no member named ‘exc_value’
     tstate->exc_value = local_value;
             ^
sklearn/cluster/_dbscan_inner.cpp:6034:13: error: ‘PyThreadState’ has no member named ‘exc_traceback’
     tstate->exc_traceback = local_tb;
             ^
error: Command "g++ -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g
-fwrapv -O3 -Wall -fPIC
-I/data/install/lib/python3.7/site-packages/numpy/core/include
-I/data/install/lib/python3.7/site-packages/numpy/core/include
-I/data/install/include/python3.7m -c sklearn/cluster/_dbscan_inner.cpp -o
build/temp.linux-x86_64-3.7/sklearn/cluster/_dbscan_inner.o -MMD -MF
build/temp.linux-x86_64-3.7/sklearn/cluster/_dbscan_inner.o.d" failed with exit
status 1

Versões

Linux-3.10.0-862.el7.x86_64-x86_64-with-redhat-7.5-Maipo
Python 3.7.0rc1 (default, Jun 19 2018, 10:54:58) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
NumPy 1.14.5
SciPy 1.1.0

Comentários muito úteis

Acho que o ponto é que o usuário Homebrew médio terá o Python 3.7 por padrão.

Uma versão secundária 0.19.2 que oferecerá suporte ao Python 3.7 está em andamento.

Todos 29 comentários

Obrigado por relatar isso!

A instalação da versão dev mais recente funciona?

pip install https://github.com/scikit-learn/scikit-learn/archive/master.zip

Observe que você precisaria de Cython> = 0.27.3 para compilá-lo.

(Link para https://github.com/scikit-learn/scikit-learn/issues/11224 para referência futura)

Parece que isso pode ser algo que a Cython precisa consertar e liberar. Nós
dependem do suporte da Cython para Py3.7 aqui.

Sim, de acordo com https://github.com/cython/cython/issues/1955, os requisitos mínimos do Python 3.7 são Cython 0.27.3, onde esse problema foi corrigido. Em # 11224, posso confirmar que a construção funciona bem com Cython 0.28.

A versão mínima do Cython em doc/developers/advanced_installation.rst provavelmente deve ser atualizada de acordo com o Python 3.7

A maneira mais fácil de mudarmos para o suporte ao Python 3.7 é usá-lo em nosso trabalho diário de "dependências mais recentes". Mas isso é mais fácil quando o NumPy e o SciPy oferecem suporte ao Python 3.7. NumPy está produzindo rodas para 3.7. No momento, o SciPy não está fazendo compilações no Python 3.7, mas está trabalhando nisso (https://github.com/scipy/scipy/pull/8988). Tentaremos seguir o exemplo.

IMO, não devemos nos preocupar com o suporte a Python 3.7 na v0.20.0, mas lidar com isso em uma versão de correção de bug (0.20.1 ou 0.20.2), dado o suporte limitado em SciPy e Six (https://github.com / benjaminp / six / pull / 241).

IMO, não devemos nos preocupar com o suporte do Python 3.7 na v0.20.0, mas lidar com isso em uma versão de correção de bug (0.20.1 ou 0.20.2),

Para resumir a situação do Python 3.7,

SciPy agora tem rodas binárias para Python 3.7 (todas as plataformas).

FWIW, # 11409 identifica que podemos construir com as versões de desenvolvimento de numpy, scipy e cython, e todos os testes passam (embora com PendingDeprecationWarning e DeprecationWarning). No entanto, ele não tenta executar a galeria de exemplos. Nem tenta compilar no Windows (talvez devesse).

homebrew me atualizou para o python 3.7.0 e agora fico sem o scikit-learn.
quando você acha que poderei fazer pip3 install scikit-learn ? uma semana? um mês? um ano?
Preciso dessas informações para decidir se devo esperar ou fazer o downgrade para o 3.6. *.
Muito obrigado.

quando você acha que poderei fazer o pip3 install scikit-learn? uma semana? um mês? um ano?

Um mês quase para o próximo lançamento. Enquanto isso, você pode instalar a versão de desenvolvimento https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438 ou fazer downgrade para o python 3.6.

Podemos considerar o lançamento do 0.19.2 rapidamente apenas para o suporte ao Py3.7 ??

Dada a quantidade de questões que foram abertas recentemente sobre isso, pode ser preferível de fato. Também simplificará comparações / rastreamento de regressão entre 0,19.xe 0,20.x para pessoas que usam Python 3.7 no futuro.

Se acabarmos lançando o 0.19.2, aqui estão duas coisas a considerar, porque eles perderam o 0.19.1 sem nenhum bom motivo.

No Ubuntu 18.04, a solução alternativa recomendada funciona:
pip install https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

Um mês quase para o próximo lançamento. Enquanto isso, você pode instalar a versão de desenvolvimento # 11320 (comentário) ou fazer o downgrade para o python 3.6.

O Homebrew atualizou sua instalação padrão do Python para 3.7. Já que o homebrew não permite a instalação de versões específicas, o downgrade para o 3.6 não é uma perspectiva fácil. Apenas um FYI

@bgyarfas deve ser possível fazer o downgrade do python 3.7 de volta para o 3.6.5 no brew

brew info python3
brew switch python 3.6.5

Isso funciona apenas se a versão anterior ainda estiver armazenada em cache na máquina local.

@bgyarfas Se você não tem o 3.6 em cache no homebrew, pode usar o pyenv. O seguinte funcionou para mim ...

brew install pyenv
pyenv install 3.6.5
eval "$(pyenv init -)"
pyenv shell 3.6.5
pip install virtualenv
virtualenv venv-3.6
source venv-3.6/bin/activate

Você pode fazer isso sem o virtualenv, mas minha configuração típica depende dele.

Acho que o ponto é que o usuário Homebrew médio terá o Python 3.7 por padrão.

Acho que o ponto é que o usuário Homebrew médio terá o Python 3.7 por padrão.

Uma versão secundária 0.19.2 que oferecerá suporte ao Python 3.7 está em andamento.

qual é o cronograma para o lançamento 19.2?
obrigado!

@ sam-s Se precisar agora, você pode tentar instalar o branch master usando a versão mais recente do cython:

pip install -U cython
pip install -e git+https://github.com/scikit-learn/scikit-learn@master#egg=scikit-learn

Isso funcionou para mim no Python 3.7 usando pipenv.
Claro, quando a versão estiver disponível, você deve trocar do branch master (possivelmente) instável para a versão correta.

você também pode instalar a partir do branch 0.19.X que está basicamente pronto para
lançamento, mas as pessoas que podem fazer o lançamento não estiveram disponíveis.

A versão 0.19.2 agora está disponível em PyPI: https://pypi.org/project/scikit-learn/0.19.2/

Fechamento corrigido. Use 0.19.2 com Python 3.7.

Qual é o plano para 0.20.X? Parece que posso construir com 0.20.0, mas não com 0.20.1.
Os erros são como:

     sklearn/cluster/_hierarchical.cpp:24792:13: error: ‘PyThreadState {aka struct _ts}’ has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
           tstate->exc_traceback = *tb;

Você tentou atualizar o Cython conforme mencionado em https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435?

Acabei de atualizar para 0.20.2 e está funcionando.

Fiz a experiência de que todas as versões inferiores a 0.20 (por exemplo, 0.16 , 0.17 , 0.18 , 0.19 ) quebrarão.

Meus testes: https://travis-ci.org/nok/sklearn-porter/builds/561765760

Existem planos para cobrir essas versões?

Eu fiz a experiência de que todas as versões inferiores a 0,20 (por exemplo, 0,16, 0,17, 0,18, 0,19) irão quebrar.
Existem planos para cobrir essas versões?

Acho que não. Os usuários com Python 3.7 precisam atualizar para o scikit-learn 0.20.X pelo menos.

Esta página foi útil?
0 / 5 - 0 avaliações