what's this? Comme le titre l'indique, l'histoire d'essayer d'utiliser mkl avec numpy et scipy dans l'environnement de poésie pyenv +. Ce serait facile si je connaissais la solution, mais il a fallu beaucoup de temps pour y arriver ... L'environnement est mac OS 10.14.6 Mojave La version de pyenv est 1.2.16-5-g7097f820 La version poésie est 1.0.3 est.
Peut-être que beaucoup de personnes qui consultent cet article rencontreront des problèmes similaires et voudront les résoudre rapidement, alors j'écrirai d'abord la conclusion (solution).
Le nom du projet est «mon-projet» et la version de python utilisée est la 3.7.4.
On suppose que mkl
est installé dans / opt / intel / ʻen standard. On suppose que le répertoire du projet est défini pour créer .venv (
poetry config virtualenvs.in-project true`).
Créez un répertoire de projet et spécifiez la version de python. Jusqu'à ce point, c'est normal.
$ mkdir my-project && cd $_
$ pyenv local 3.7.4
Normalement, la poésie crée «.venv» seule, vous n'avez donc pas à créer vous-même «.venv», mais cette fois
--Edit .venv / bin / activate
pour définir les variables d'environnement pour mkl
--Edit .venv / pip.conf
pour construire numpy, scipy
Alors faites votre propre .venv
.
$ python -m venv .venv
Définir les variables d'environnement pour mkl
$ 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
Créez .venv / pip.conf
et définissez no-binary = numpy, scipy
, no-use-pep517
.
$ touch .venv/pip.conf && echo -e "[install]\nuse-pep517=false\nno-binary=numpy,scipy" >> .venv/pip.conf
Créez un fichier de configuration $ HOME / .numpy-site.cfg
pour numpy build avec le contenu suivant.
[mkl]
library_dirs = $MKLROOT/lib
include_dirs = $MKLROOT/include
mkl_libs = mkl_rt
lapack_libs =
Maintenant que je suis prêt, 'poésie dedans'
$ 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]
Tout d'abord, insérez «cython».
$ poetry add cython
Puis numpy
.
$ poetry add numpy
Ici, si vous faites poetry run python -c" import numpy; numpy.show_config () "
,
Traceback (most recent call last):
(Omission)
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]: Lorsque j'entre dans l'environnement virtuel avec poetry shell
et que je démarre python
et ʻimport numpy, cette erreur n'apparaît pas ... mais dans cet état,
poetry add scipy` échoue. Il n'y a donc pas d'autre choix que d'ajouter rpath.
Si ça arrive,
$ install_name_tool -add_rpath $MKLROOT/lib .venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so
Éxécuter. Puis,
$ 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']
Prémonition du bonheur ...
Mettez scipy à la fin. Si tout va bien jusqu'ici, le reste devrait se passer sans problème. (La construction de Scipy prend du temps. Veuillez patienter)
$ 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']
Je vous remercie pour votre travail acharné.
Le chemin vers la solution ci-dessus a été assez long. Je vous enverrai un résumé du voyage (presque mon propre mémo). Il n'y a aucun problème à le sauter.
$ mkdir my-project
$ pyenv local 3.7.4
$ python -m venv .venv
$ poetry init
.venv / pip.conf
[install]
no-binary = numpy,scipy
Créez avec et modifiez les autres ~ / .numpy-site.cfg
et .venv / bin / activate
de la même manière que la solution ci-dessus.
poetry add numpy
réussit (bien que je ne puisse pas ajouter rpath), mais quand je lancepoetry add scipy
...
[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'
...(Omission)...
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
Le terminal devient rouge vif.
no-binary
après avoir construit numpy?.venv / pip.conf
[install]
no-binary = numpy
Après avoir installé numpy avec poetry add numpy
(encore une fois, vous devez ajouter rpath), puis .venv / pip.conf
[install]
no-binary = scipy
Si vous le réécrivez comme "poésie ajoutez scipy" ... cela fonctionne.
Mais c'est un problème ... Explorons un peu plus.
Je le plie, mais pyenv seul donne le même symptôme ...
N'est-ce pas inutile car il est construit avec / private / var / ...
?
Essayez d'installer scipy avec pip avec --no-build-isolation
dans un environnement pyenv uniquement et cela fonctionne.
Même en poésie, je pensais que je pourrais le faire si je désactivais build-isolation
, alors j'ai changé.venv / pip.conf
[install]
build-isolation = false
no-binary = numpy,scipy
Quand je l'essaye comme ...
C'était impossible. Le terminal est rouge vif. Je suis sur le point de pleurer.
no-use-pep517
?Après avoir recherché diverses choses,
Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy behaviour).
Dans le guide de référence pip.
... N'est-ce pas --no-use-pep517
possible?
.venv / pip.conf
[install]
use-pep517=false
no-binary=numpy,scipy
Essayez comme. J'ai bien fait. Cela conduit à la solution ci-dessus.
C'est un problème, donc je pense qu'il vaut mieux le faire à moins que ce ne soit trop.
Recommended Posts