建構 Python 套件成功,但套件建置不正確

建構 Python 套件成功,但套件建置不正確

運行時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 就無法安裝的原因是軟體的安裝過程(大多時候)是這樣的。

  1. 設定步驟 - 準備用於建置程式的檔案。這不需要 root 權限。
  2. 建置步驟 - 編譯程序,產生一些可執行檔和/或函式庫。這不需要 root 權限。
  3. 安裝 - 將庫和/或可執行檔案移至作業系統中的目的地,以便其他程式可以使用它。

建立建立/usr/local/lib/python3.4/dist-packages/sklearn以便其他程式可以使用它(例如 python 解釋器),這就是您收到錯誤的原因。

相關內容