Importieren Sie vtk mit Brew Python

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

Importieren Sie vtk mit Brew Python
Importieren Sie tsv mit Python
Arbeiten mit LibreOffice in Python: Importieren
Statistik mit Python
Python-Modul importieren
Python mit Go
Twilio mit Python
In Python integrieren
Importieren Sie ein Python-Skript
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Fassen Sie den Python-Import zusammen
Mit Python besetzen
Python> Mit Laufzeitargumenten ausführen> Import argparse verwenden
Untersuchung beim Import kann nicht mit Python durchgeführt werden
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Serielle Kommunikation mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Python aus oder importieren
Import des Python-Originalmoduls
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Denken Sie an Yaml mit Python
Kinesis mit Python betreiben
Erste Schritte mit Python
Verwenden Sie DynamoDB mit Python
Zundko Getter mit Python
Behandle Excel mit Python
Ohmsches Gesetz mit Python
Primzahlbeurteilung mit Python
Führen Sie Blender mit Python aus