Ao executar python3 setup.py build
terminou 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 sudo
foi 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 sklearn
recebo 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 build
com 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 dev
e 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 search
ou aptitude search
para descobrir se ela já está empacotada. Se estiver, instale o pacote. Se não for, provavelmente será melhor usar deb-dry
as debhelper
ferramentas 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 sudo
vez. 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).
- Etapa de configuração - você prepara arquivos para construir o programa. Isso não deveria precisar de privilégios de root.
- Etapa de construção - você compila seu programa, gerando alguns executáveis e/ou bibliotecas. Isso não deve exigir privilégios de root.
- 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/sklearn
para que outros programas possam usá-lo (por exemplo, interpretador python), e é por isso que você está recebendo um erro.