Dans la situation en utilisant python sur homebrew
$ brew install --python --qt vtk
Puis
import vtk
# => Fatal Python error: PyThreadState_Get: no current thread. Abort trap: 6
Sera.
C'est comme mentionné dans le numéro homebrew-science OSX dans * .dylib et * .so qui vient avec l'installation de brew En effet, le chemin Python côté système est intégré.
Essayez otool -L (les outils de ligne de commande Xcode sont nécessaires pour utiliser otool et install_name_tool)
$ otool -L /usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCorePython27D-7.0.dylib
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCorePython27D-7.0.dylib:
/usr/local/opt/vtk/lib/libvtkCommonCorePython27D-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkWrappingPython27Core-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCore-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.10)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtksys-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Comme vous pouvez le voir, le lien vers /System/Library/Frameworks/Python.framework/Versions/2.7/Python est intégré. Pour résoudre ce problème, utilisez install_name_tool
$ sudo install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python /usr/local/Cellar/python/2.7.11/Frameworks/Python /usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCorePython27D-7.0.dylib
Courez. (Sudo est requis pour la réécriture) Quand je le vérifie,
$ otool -L /usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCorePython27D-7.0.dylib
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCorePython27D-7.0.dylib:
/usr/local/opt/vtk/lib/libvtkCommonCorePython27D-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkWrappingPython27Core-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtkCommonCore-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/python/2.7.11/Frameworks/Python (compatibility version 2.7.0, current version 2.7.10)
/usr/local/Cellar/vtk/7.0.0_3/lib/libvtksys-7.0.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Vous pouvez voir que le lien peut être modifié vers le chemin de brew python. Ce n'est pas celui-ci qui doit être changé, mais __ / usr / local / lib / python2.7 / site-in en plus de __ / usr / local / Cellar / vtk / {version} /lib/*.dylib__ Étant donné que les packages / vtk / vtk * .so__ doivent également être modifiés, j'ai écrit le script suivant.
vtk_fix_pythonpath.sh
#!/bin/sh
SystemPythonPath=/System/Library/Frameworks/Python.framework/Versions/2.7/Python #Changer en fonction de la version de python que vous utilisez
BrewPythonPath=/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Python #Changer en fonction de la version de python que vous utilisez
function replace_system_python() {
echo " -- before -- "
otool -L $1
install_name_tool -change ${SystemPythonPath} ${BrewPythonPath} $1
echo " -- after -- "
otool -L $1
}
for file in `find /usr/local/lib/python2.7/site-packages/vtk/vtk*.so`;do
replace_system_python ${file}
done
for file in `find /usr/local/Cellar/vtk/7.0.0_3/lib/*.dylib`;do
replace_system_python ${file}
done
C'est une mauvaise manière d'exécuter install_name_tool -change pour tous les fichiers dylib, donc les fichiers (même ceux qui n'incluent pas le chemin Python), mais cela ne devrait pas être un problème car il ne sera pas remplacé à moins qu'il ne corresponde.
$ sudo ./vtk_fix_pythonpath.sh
Après cela, si vous vérifiez si vous pouvez importer,
import vtk
# => No error!!!!!!
J'ai pu importer sans aucun problème. Si vous lisez le problème de la science à domicile, il semble que certaines personnes aient écrit un correctif qui peut construire vtk sans incorporer de liens, mais voulez-vous toujours corriger le corps principal?
Recommended Posts