Al ejecutarlo python3 setup.py build
terminó con esto:
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
Por supuesto, no se pudo escribir /usr/local/lib/
porque no sudo
se usó. Tengo miedo de usar sudo para este paso.
Este fue el final 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
Me parece bien. Sin embargo, cuando intento hacerlo, import sklearn
aparece este error:
$ 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.
>>>
¿Debería correr python3 setup.py build
con sudo
?Esto está en 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
Tenga en cuenta que la versión empaquetada de Ubuntu python-scikits-learn
es solo para Python 2 y necesito Python 3.
Respuesta1
encontréesta publicaciónque mencionaba configurar qué versión de ATLAS (paquete de álgebra lineal) 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
Después de eso, me sorprendió gratamente que, de hecho, ya no había un problema de permisos, sino que recibía este error en la compilación:
sklearn/__check_build/_check_build.c:4:20: fatal error: Python.h: No such file or directory
Por lo tanto, revisé los resultados aptitude search python | grep dev
y decidí que los siguientes paquetes podrían ayudar:
$ sudo aptitude install python3-numpy-dev python3.5-dev libpython3.4-dev
Y con eso, el paquete se creó correctamente y scikit-learn se importa correctamente:
$ 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
>>>
No estoy seguro de cuál de los tres paquetes era probablemente el paquete crítico, libpython3.4-dev
pero el problema está resuelto.
Respuesta2
Debes limpiar (eliminar) tu instalación local y ejecutar sudo apt-get install python-scikits-learn
. Está empaquetado para Debian, por lo que también estará empaquetado para Ubuntu y derivados.
Las instrucciones de instalación para bibliotecas de Python a menudo le indican que instale las cosas manualmente. Esto es un error si la biblioteca ya ha sido empaquetada para su distribución: el paquete de distribución estará mucho mejor integrado en el sistema que seguir algunas instrucciones de instalación en un sitio web.
Lo primero que debes hacer cuando quieras instalar una biblioteca de Python es usar herramientas como apt-cache search
o aptitude search
averiguar si ya está empaquetada. Si es así, instale el paquete. Si no es así, probablemente sea mejor que utilice deb-dry
o las debhelper
herramientas que le ayudarán a crear un paquete local que seguir instrucciones que probablemente sólo funcionen en el entorno idiosincrásico del desarrollador de la biblioteca.
Respuesta3
Para resolver el problema, debes continuar con la instalación, y esto significaría ejecutar la compilación nuevamente, pero con sudo
este tiempo. La razón por la que no se puede instalar sin sudo es cómo se ve el proceso de instalación del software (la mayoría de las veces).
- Paso de configuración: prepara archivos para crear el programa. Esto no debería necesitar privilegios de root.
- Paso de compilación: compila su programa y genera algunos ejecutables y/o bibliotecas. Esto no debería requerir privilegios de root.
- Instalación: mueve bibliotecas y/o ejecutables a su destino en el sistema operativo, para que otros programas puedan usarlos.
Build crea /usr/local/lib/python3.4/dist-packages/sklearn
para que otros programas puedan usarlo (por ejemplo, el intérprete de Python), y es por eso que aparece un error.