A construção de pacotes Python foi bem-sucedida, mas o pacote foi construído incorretamente

A construção de pacotes Python foi bem-sucedida, mas o pacote foi construído incorretamente

Ao executar python3 setup.py buildterminou assim:

x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.4/sklearn/linear_model/sag_fast.o -Lbuild/temp.linux-x86_64-3.4 -o build/lib.linux-x86_64-3.4/sklearn/linear_model/sag_fast.cpython-34m.so
running install_lib
creating /usr/local/lib/python3.4/dist-packages/sklearn
error: could not create '/usr/local/lib/python3.4/dist-packages/sklearn': Permission denied

É claro que não foi possível escrever /usr/local/lib/porque não sudofoi usado. Tenho receio de usar o sudo para esta etapa.

Este foi o fim de sudo python3 setup.py install:

running install_egg_info
Writing /usr/local/lib/python3.4/dist-packages/scikit_learn-0.18.dev0.egg-info
running install_clib

Parece bom para mim. No entanto, quando tento, import sklearnrecebo este erro:

$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sklearn
Traceback (most recent call last):
File "/home/dotancohen/code/scikit-learn/sklearn/__check_build/__init__.py", line 44, in <module>
    from ._check_build import check_build
ImportError: No module named 'sklearn.__check_build._check_build'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/dotancohen/code/scikit-learn/sklearn/__init__.py", line 56, in <module>
    from . import __check_build
File "/home/dotancohen/code/scikit-learn/sklearn/__check_build/__init__.py", line 46, in <module>
    raise_build_error(e)
File "/home/dotancohen/code/scikit-learn/sklearn/__check_build/__init__.py", line 41, in raise_build_error
    %s""" % (e, local_dir, ''.join(dir_content).strip(), msg))
ImportError: No module named 'sklearn.__check_build._check_build'
___________________________________________________________________________
Contents of /home/dotancohen/code/scikit-learn/sklearn/__check_build:
_check_build.c            setup.pyc                 __pycache__
_check_build.pyx          __init__.py               setup.py
___________________________________________________________________________
It seems that scikit-learn has not been built correctly.

If you have installed scikit-learn from source, please do not forget
to build the package before using it: run `python setup.py install` or
`make` in the source directory.

If you have used an installer, please check that it is suited for your
Python version, your operating system and your platform.
>>>

Devo correr python3 setup.py buildcom sudo?Isto está no Kubuntu Linux 15.10:

$ uname -a
Linux loathe 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/issue
Ubuntu 15.10 \n \l

Observe que a versão empacotada no Ubuntu python-scikits-learné apenas para Python 2 e eu preciso do Python 3.

Responder1

eu encontreiesta postagemque mencionou configurar qual versão do ATLAS (pacote de álgebra linear) usar:

$ sudo update-alternatives --set libblas.so.3 /usr/lib/atlas-base/atlas/libblas.so.3
$ sudo update-alternatives --set liblapack.so.3 /usr/lib/atlas-base/atlas/liblapack.so.3

Depois disso, fiquei felizmente surpreso ao saber que, na verdade, não havia mais um problema de permissões, mas, em vez disso, estava recebendo este erro na compilação:

sklearn/__check_build/_check_build.c:4:20: fatal error: Python.h: No such file or directory

Portanto, revisei os resultados aptitude search python | grep deve decidi que os seguintes pacotes poderiam ajudar:

$ sudo aptitude install python3-numpy-dev python3.5-dev libpython3.4-dev

E com isso o pacote foi construído corretamente e o scikit-learn importa corretamente:

$ python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50) 
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sklearn
>>>

Não tenho certeza de qual dos três pacotes era o pacote crítico, provavelmente libpython3.4-dev, mas o problema foi resolvido.

Responder2

Você deve limpar (remover) sua instalação local e executar o sudo apt-get install python-scikits-learn. Ele é empacotado para Debian, então também será empacotado para Ubuntu e derivados.

As instruções de instalação para bibliotecas python geralmente dizem para você instalar as coisas manualmente. Isto é um erro se a biblioteca já tiver sido empacotada para sua distro - o pacote da distro será muito melhor integrado ao sistema do que seguir algumas instruções de instalação em um site.

A primeira coisa que você deve fazer quando deseja instalar uma biblioteca python é usar ferramentas como apt-cache searchou aptitude searchpara descobrir se ela já está empacotada. Se estiver, instale o pacote. Se não for, provavelmente será melhor usar deb-dryas debhelperferramentas para ajudá-lo a construir um pacote local do que seguir instruções que provavelmente só funcionam no ambiente idiossincrático do desenvolvedor da lib.

Responder3

Para resolver o problema, você deve continuar a instalação - e isso significaria executar o build novamente, mas desta sudovez. A razão pela qual você não conseguiu instalar sem o sudo é a aparência do processo de instalação do software (na maioria das vezes).

  1. Etapa de configuração - você prepara arquivos para construir o programa. Isso não deveria precisar de privilégios de root.
  2. Etapa de construção - você compila seu programa, gerando alguns executáveis ​​e/ou bibliotecas. Isso não deve exigir privilégios de root.
  3. Instalação - você move bibliotecas e/ou executáveis ​​para seu destino no sistema operacional, para que outros programas possam utilizá-los.

Build cria /usr/local/lib/python3.4/dist-packages/sklearnpara que outros programas possam usá-lo (por exemplo, interpretador python), e é por isso que você está recebendo um erro.

informação relacionada