La creación de paquetes de Python se realizó correctamente, pero el paquete no se creó correctamente

La creación de paquetes de Python se realizó correctamente, pero el paquete no se creó correctamente

Al ejecutarlo python3 setup.py buildterminó 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 sudose 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 sklearnaparece 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 buildcon 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-learnes 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 devy 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-devpero 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 searcho aptitude searchaveriguar si ya está empaquetada. Si es así, instale el paquete. Si no es así, probablemente sea mejor que utilice deb-dryo las debhelperherramientas 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 sudoeste 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).

  1. Paso de configuración: prepara archivos para crear el programa. Esto no debería necesitar privilegios de root.
  2. Paso de compilación: compila su programa y genera algunos ejecutables y/o bibliotecas. Esto no debería requerir privilegios de root.
  3. 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/sklearnpara que otros programas puedan usarlo (por ejemplo, el intérprete de Python), y es por eso que aparece un error.

información relacionada