In der Situation mit Python auf Homebrew
$ brew install --python --qt vtk
Dann
import vtk
# => Fatal Python error: PyThreadState_Get: no current thread. Abort trap: 6
Wird sein.
Dies ist wie in der Homebrew-Science-Ausgabe erwähnt OSX in * .dylib und * .so, das mit der Brew-Installation einhergeht Dies liegt daran, dass der Python-Pfad auf der Systemseite eingebettet ist.
Versuchen Sie es mit otool -L (Xcode-Befehlszeilentools sind erforderlich, um otool und install_name_tool zu verwenden.)
$ 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)
Wie Sie sehen können, ist der Link zu /System/Library/Frameworks/Python.framework/Versions/2.7/Python eingebettet. Verwenden Sie install_name_tool, um dies zu beheben
$ 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
Lauf einfach. (Sudo wird zum Umschreiben benötigt) Wenn ich es überprüfe,
$ 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)
Sie können sehen, dass der Link zum Pfad von Brew Python geändert werden kann. Es ist nicht dieses, das geändert werden muss, sondern __ / usr / local / lib / python2.7 / site-zusätzlich zu __ / usr / local / Cellar / vtk / {version} /lib/*.dylib__ Da auch die Pakete / vtk / vtk * .so__ geändert werden müssen, habe ich das folgende Skript geschrieben.
vtk_fix_pythonpath.sh
#!/bin/sh
SystemPythonPath=/System/Library/Frameworks/Python.framework/Versions/2.7/Python #Ändern Sie entsprechend der von Ihnen verwendeten Python-Version
BrewPythonPath=/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Python #Ändern Sie entsprechend der von Ihnen verwendeten Python-Version
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
Es ist schlecht, install_name_tool -change für alle Dylibs auszuführen, also Dateien (auch solche, die den Python-Pfad nicht enthalten), aber es sollte kein Problem sein, da sie erst ersetzt werden, wenn sie übereinstimmen.
$ sudo ./vtk_fix_pythonpath.sh
Wenn Sie danach prüfen, ob Sie importieren können,
import vtk
# => No error!!!!!!
Ich konnte problemlos importieren. Wenn Sie das Home-Science-Problem lesen, scheinen einige Leute einen Patch geschrieben zu haben, der vtk erstellen kann, ohne Links einzubetten, aber möchten Sie trotzdem den Hauptteil reparieren?
Recommended Posts