what's this? Wie der Titel schon sagt, die Geschichte des Versuchs, mkl mit Numpy und Scipy in der Pyenv + -Poesie-Umgebung zu verwenden. Es wäre einfach, wenn ich die Lösung wüsste, aber es hat lange gedauert, bis ich dort ankam ... Die Umgebung ist Mac OS 10.14.6 Mojave Die Version von pyenv ist 1.2.16-5-g7097f820 Die Gedichtversion ist 1.0.3 ist.
Vielleicht werden viele Leute, die sich diesen Artikel ansehen, auf ähnliche Probleme stoßen und diese schnell lösen wollen, also werde ich zuerst die Schlussfolgerung (Lösung) schreiben.
Der Projektname lautet "my-project" und die verwendete Python-Version ist 3.7.4.
Es wird davon ausgegangen, dass mkl
standardmäßig in / opt / intel /
installiert ist.
Es wird angenommen, dass das Projektverzeichnis so eingestellt ist, dass .venv erstellt wird (poet config virtualenvs.in-project true
).
Erstellen Sie ein Projektverzeichnis und geben Sie die Python-Version an. Bis zu diesem Punkt ist normal.
$ mkdir my-project && cd $_
$ pyenv local 3.7.4
Normalerweise erstellt die Poesie ".venv" von selbst, so dass Sie ".venv" nicht selbst erstellen müssen, sondern diesmal
.venv / bin / enabled
, um die Umgebungsvariablen für mkl festzulegen.venv / pip.conf
, um numpy, scipy zu erstellenAlso mach dein eigenes .venv
.
$ python -m venv .venv
Legen Sie Umgebungsvariablen für mkl fest
$ echo -e "source /opt/intel/bin/compilervars.sh intel64\nsource /opt/intel/mkl/bin/mklvars.sh\nsource /opt/intel/tbb/bin/tbbvars.sh" >> .venv/bin/activate
Erstellen Sie ".venv / pip.conf" und setzen Sie "no-binary = numpy, scipy", "no-use-pep517".
$ touch .venv/pip.conf && echo -e "[install]\nuse-pep517=false\nno-binary=numpy,scipy" >> .venv/pip.conf
Erstellen Sie eine Konfigurationsdatei $ HOME / .numpy-site.cfg
für numpy build mit dem folgenden Inhalt.
[mkl]
library_dirs = $MKLROOT/lib
include_dirs = $MKLROOT/include
mkl_libs = mkl_rt
lapack_libs =
Jetzt, wo ich bereit bin, "Poesie drin"
$ poetry init
This command will guide you through creating your pyproject.toml config.
Package name [my-project]:
Version [0.1.0]:
Description []:
Author [hogehoge, n to skip]:
License []:
Compatible Python versions [^3.7]:
Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your dev dependencies (require-dev) interactively (yes/no) [yes] no
Generated file
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["hogehoge"]
[tool.poetry.dependencies]
python = "^3.7"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Do you confirm generation? (yes/no) [yes]
Fügen Sie zuerst "Cython" ein.
$ poetry add cython
Dann numpy
.
$ poetry add numpy
Hier, wenn Sie Poesie ausführen python -c" import numpy; numpy.show_config () "
,
Traceback (most recent call last):
(Unterlassung)
Original error was: dlopen(/path/to/my-project/.venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmkl_rt.dylib
Referenced from: /path/to/my-project/.venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so
Reason: image not found
[^ 1] [^ 1]: Wenn Sie die virtuelle Umgebung mit "Poetry Shell" betreten und dann "Python" und "Import Numpy" starten, wird dieser Fehler nicht angezeigt. In diesem Zustand schlägt "Poetry Add Scipy" jedoch fehl. Es bleibt also nichts anderes übrig, als rpath hinzuzufügen. Wenn das passiert,
$ install_name_tool -add_rpath $MKLROOT/lib .venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so
Ausführen. Dann,
$ poetry run python -c "import numpy; numpy.show_config()"
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
Vorahnung des Glücks ...
Setzen Sie scipy am Ende. Wenn alles soweit gut geht, sollte der Rest reibungslos verlaufen. (Scipy Build braucht Zeit. Bitte warten Sie geduldig)
$ poetry add scipy
poetry run python -c "import scipy; scipy.show_config()"
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/include', '/opt/intel/compilers_and_libraries_2020.0.166/mac/mkl/lib']
Danke für deine harte Arbeit.
Der Weg zur obigen Lösung war ziemlich lang. Ich werde Ihnen eine Zusammenfassung der Reise schicken (fast mein eigenes Memo). Es ist kein Problem, es zu überspringen.
$ mkdir my-project
$ pyenv local 3.7.4
$ python -m venv .venv
$ poetry init
.venv / pip.conf
[install]
no-binary = numpy,scipy
Erstellen Sie mit und bearbeiten Sie die anderen ~ / .numpy-site.cfg
und .venv / bin / enabled
auf die gleiche Weise wie in der obigen Lösung.
poetry add numpy
ist erfolgreich (obwohl ich rpath nicht hinzufügen kann), aber wenn ichpoetry führe, füge scipy
hinzu ...
[EnvCommandError]
Command ['/path/to/my-project/.venv/bin/pip', 'install', '--no-deps', 'scipy==1.4.1'] errored with the following return code 1, and output:
Collecting scipy==1.4.1
Using cached https://files.pythonhosted.org/packages/04/ab/e2eb3e3f90b9363040a3d885ccc5c79fe20c5b8a3caa8fe3bf47ff653260/scipy-1.4.1.tar.gz
Installing build dependencies: started
Installing build dependencies: still running...
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing wheel metadata: started
Preparing wheel metadata: finished with status 'error'
...(Unterlassung)...
Original error was: dlopen(/private/var/folders/9x/94rd8dwd1vg49h9bt7_0kd0w0000gn/T/pip-build-env-mb4t9me7/overlay/lib/python3.7/site-packages/numpy/core/multiarray.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmkl_rt.dylib
Referenced from: /private/var/folders/9x/94rd8dwd1vg49h9bt7_0kd0w0000gn/T/pip-build-env-mb4t9me7/overlay/lib/python3.7/site-packages/numpy/core/multiarray.cpython-37m-darwin.so
Reason: image not found
Das Terminal wird hellrot.
no-binary
, nachdem Sie numpy erstellt haben?.venv / pip.conf
[install]
no-binary = numpy
Nach der Installation von numpy mit poet add numpy
(wieder müssen Sie rpath hinzufügen), dann .venv / pip.conf
[install]
no-binary = scipy
Wenn Sie es als "Poesie hinzufügen scipy" umschreiben ... funktioniert es.
Aber es ist ein Ärger ... Lassen Sie uns etwas mehr erforschen.
Ich falte es, aber Pyenv allein gibt das gleiche Symptom ...
Ist es nicht nutzlos, weil es mit / private / var / ...
erstellt wurde?
Versuchen Sie, scipy mit pip mit --no-build-isolation
in einer Nur-Pyenv-Umgebung zu installieren, und es funktioniert.
Sogar in der Poesie dachte ich, dass ich es schaffen könnte, wenn ich "Build-Isolation" deaktiviere, also habe ich ".venv / pip.conf" geändert
[install]
build-isolation = false
no-binary = numpy,scipy
Wenn ich es versuche als ...
Es war unmöglich. Das Terminal ist hellrot. Ich weine gleich.
no-use-pep517
zu verwenden?Nach der Erforschung verschiedener Dinge,
Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy behaviour).
Im Pip-Referenzhandbuch.
... Ist das nicht möglich - --no-use-pep517?
.venv / pip.conf`
[install]
use-pep517=false
no-binary=numpy,scipy
Versuchen Sie es als. Ich hab es gut gemacht. Dies führt zu der obigen Lösung.
Es ist ein Ärger, also denke ich, dass es besser ist, es zu tun, wenn es nicht zu viel ist.
Recommended Posts