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/nosudoが使用されているため、書き込むことはできません。この手順で 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-learnPython 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
>>>

3 つのパッケージのうちどれが重要なパッケージであったかはわかりませんがlibpython3.4-dev、おそらく問題は解決しました。

答え2

ローカルインストールをクリーンアップ (削除) して実行する必要がありますsudo apt-get install python-scikits-learn。これは Debian 用にパッケージ化されているため、Ubuntu および派生版用にもパッケージ化されます。

Python ライブラリのインストール手順では、多くの場合、手動でインストールするように指示されています。ライブラリがすでにディストリビューション用にパッケージ化されている場合、これは間違いです。Web サイトのインストール手順に従うよりも、ディストリビューション パッケージの方がシステムに統合されやすくなります。

Python ライブラリをインストールするときに最初に行うべきことは、apt-cache searchやなどのツールを使用してaptitude search、それがすでにパッケージ化されているかどうかを確認することです。パッケージ化されている場合は、パッケージをインストールします。パッケージ化されていない場合は、ライブラリ開発者の独自の環境でのみ機能する可能性のある手順に従うよりも、deb-drydebhelperツールを使用してローカル パッケージを構築する方がよいでしょう。

答え3

この問題を解決するには、インストールを続行する必要があります。これは、今度はビルドを再度実行することを意味しますsudo。sudo なしでインストールできなかった理由は、ソフトウェアのインストール プロセスがどのようになっているかです (ほとんどの場合)。

  1. 構成手順 - プログラムをビルドするためのファイルを準備します。これにはルート権限は必要ありません。
  2. ビルド ステップ - プログラムをコンパイルして、実行可能ファイルやライブラリを生成します。これにはルート権限は必要ありません。
  3. インストール - ライブラリや実行ファイルを OS 内の目的の場所に移動し、他のプログラムが使用できるようにします。

ビルドは他のプログラム(Python インタープリターなど)が使用できるように作成する/usr/local/lib/python3.4/dist-packages/sklearnため、エラーが発生します。

関連情報