运行时python3 setup.py build
它以这样的方式结束:
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
当然它不能写入,/usr/local/lib/
因为没有sudo
使用。我对在这一步中使用 sudo 持谨慎态度。
这是结束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
在我看来很好。但是,当我尝试时,import sklearn
我收到此错误:
$ 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.
>>>
我应该python3 setup.py build
和 一起跑吗sudo
?这是在 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
请注意,Ubuntu 打包版本python-scikits-learn
仅适用于 Python 2,我需要 Python 3。
答案1
我发现这个帖子其中提到配置要使用的 ATLAS(线性代数包)版本:
$ 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
之后,我很高兴地惊讶于事实上不再有权限问题,但我在构建时遇到了这个错误:
sklearn/__check_build/_check_build.c:4:20: fatal error: Python.h: No such file or directory
因此,我查看了结果aptitude search python | grep dev
并决定以下软件包可能会有所帮助:
$ sudo aptitude install python3-numpy-dev python3.5-dev libpython3.4-dev
这样,包就正确构建了,scikit-learn 也正确导入了:
$ 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
>>>
我不确定这三个包中的哪一个可能是关键包libpython3.4-dev
,但问题已解决。
答案2
您应该清理(删除)本地安装并运行sudo apt-get install python-scikits-learn
.它是为 debian 打包的,因此也将为 Ubuntu 及其衍生产品打包。
python 库的安装说明通常会告诉您手动安装。如果该库已经为您的发行版打包,那么这是一个错误 - 发行版包将比遵循网站上的某些安装说明更好地集成到系统中。
当你想要安装 python 库时,你应该做的第一件事是使用apt-cache search
或 之类的工具aptitude search
来查看它是否已经打包。如果是,请安装该软件包。如果不是,您可能最好使用deb-dry
或使用debhelper
工具来帮助您构建本地包,而不是遵循可能只在 lib 开发人员自己的特殊环境中工作的说明。
答案3
要解决该问题,您应该继续安装 - 这意味着再次运行构建,但sudo
这次是。没有 sudo 就无法安装的原因是软件的安装过程(大多数时候)是这样的。
- 配置步骤 - 准备用于构建程序的文件。这不需要 root 权限。
- 构建步骤 - 编译程序,生成一些可执行文件和/或库。这不需要 root 权限。
- 安装 - 将库和/或可执行文件移动到操作系统中的目的地,以便其他程序可以使用它。
构建创建/usr/local/lib/python3.4/dist-packages/sklearn
以便其他程序可以使用它(例如 python 解释器),这就是您收到错误的原因。