Beim Ausführen python3 setup.py build
endete es mit Folgendem:
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
Natürlich konnte nicht geschrieben werden, /usr/local/lib/
da „nein“ sudo
verwendet wurde. Ich bin vorsichtig, wenn ich für diesen Schritt „sudo“ verwende.
Dies war das Ende von 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
Sieht für mich gut aus. Wenn ich es jedoch versuche, import sklearn
erhalte ich diesen Fehler:
$ 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.
>>>
Soll ich python3 setup.py build
mit laufen sudo
?Dies ist auf 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
Beachten Sie, dass die Ubuntu-Paketversion python-scikits-learn
nur für Python 2 ist und ich Python 3 benötige.
Antwort1
ich fanddieser Beitragdarin wird erwähnt, dass konfiguriert werden soll, welche ATLAS-Version (Lineares Algebra-Paket) verwendet werden soll:
$ 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
Danach war ich positiv überrascht, dass es tatsächlich kein Berechtigungsproblem mehr gab, sondern stattdessen beim Build diesen Fehler erhielt:
sklearn/__check_build/_check_build.c:4:20: fatal error: Python.h: No such file or directory
Daher habe ich die Ergebnisse durchgesehen aptitude search python | grep dev
und bin zu dem Schluss gekommen, dass die folgenden Pakete hilfreich sein könnten:
$ sudo aptitude install python3-numpy-dev python3.5-dev libpython3.4-dev
Und damit ist das Paket ordnungsgemäß erstellt und scikit-learn importiert ordnungsgemäß:
$ 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
>>>
Ich bin nicht sicher, welches der drei Pakete wahrscheinlich das kritische Paket war libpython3.4-dev
, aber das Problem ist gelöst.
Antwort2
Sie sollten Ihre lokale Installation bereinigen (entfernen) und ausführen sudo apt-get install python-scikits-learn
. Es ist für Debian gepackt und wird daher auch für Ubuntu und Derivate gepackt.
In Installationsanweisungen für Python-Bibliotheken wird häufig empfohlen, die Installation manuell durchzuführen. Dies ist ein Fehler, wenn die Bibliothek bereits für Ihre Distribution gepackt wurde. Das Distributionspaket lässt sich viel besser in das System integrieren, als wenn Sie den Installationsanweisungen auf einer Website folgen.
Wenn Sie eine Python-Bibliothek installieren möchten, sollten Sie zunächst Tools wie apt-cache search
oder verwenden aptitude search
, um herauszufinden, ob sie bereits gepackt ist. Wenn dies der Fall ist, installieren Sie das Paket. Wenn dies nicht der Fall ist, ist es wahrscheinlich besser, deb-dry
die Tools oder zu verwenden debhelper
, die Ihnen beim Erstellen eines lokalen Pakets helfen, als Anweisungen zu befolgen, die wahrscheinlich nur in der eigenen, eigenwilligen Umgebung des Bibliotheksentwicklers funktionieren.
Antwort3
Um das Problem zu lösen, sollten Sie die Installation fortsetzen. Dies würde bedeuten, dass Sie Build erneut ausführen, aber mit sudo
dieser Zeitangabe. Der Grund, warum Sie die Installation nicht ohne sudo durchführen konnten, liegt daran, wie der Installationsprozess für Software aussieht (meistens).
- Konfigurationsschritt - Sie bereiten Dateien zum Erstellen des Programms vor. Dafür sollten keine Root-Rechte erforderlich sein.
- Build-Schritt - Sie kompilieren Ihr Programm und erstellen einige ausführbare Dateien und/oder Bibliotheken. Dafür sollten keine Root-Rechte erforderlich sein.
- Installation – Sie verschieben Bibliotheken und/oder ausführbare Dateien an ihr Ziel im Betriebssystem, damit andere Programme sie verwenden können.
Der Build wird /usr/local/lib/python3.4/dist-packages/sklearn
so erstellt, dass andere Programme ihn verwenden können (z. B. Python-Interpreter), und deshalb erhalten Sie einen Fehler.