2012-04-08 18 views
0

eine andere Frage „Fehler kann nicht Floyd-Algorithmus Bibliothek laden“ So versuche ich Pysomap (seine im Grunde zu arbeiten genannt, ein Programm zu bekommen Isomap aber für Python [http://web.vscht.cz/spiwokv/pysomap/]), ich folge den Anweisungen am besten, wie ich kann, aufbauend auf Ubuntu, Windows und Fedora (vorgefertigte Bibliotheken), aber es scheint nicht zu funktionieren . Unter Windows (was die bevorzugte Implementierungsplattform ist), gibt es jedes Mal, wenn ich zu Python gehe und Pysomap importiere, den obigen Fehler. Kann jemand das lösen?Wie Programm erhalten nicht werfen: für alle du-</p> <p>

Dank

-J

+1

Es gibt viel zu viele offene Aspekte hier. Ist das die beste Rückverfolgungsnachricht, die Sie bereitstellen können? Haben Sie beim Kompilieren der Bibliothek Buildfehler festgestellt? – jdi

+0

Ich denke, wir brauchen etwas Rückverfolgung/Fehler/Code, um ein besseres Bild von dem zu bekommen, was vor sich geht. – jvc26

+0

So gibt es keine Zurückverfolgungsfehler ... i durch den pysomap Code würde, und es tut dies: # Versuch zu importieren floyd Versuchen: von floyd import * Ausnahme: print „Fehler: kann nicht geladen werden Floyds Algorithmus-Bibliothek " sys.exit (2) Was bedeutet, dass es Floyds nicht finden kann? Die Sache, die mich verblüfft, ist, dass es im Verzeichnis ist ... – J3210

Antwort

1

Im pysomap Verzeichnis eine setup.py-Datei mit folgendem Inhalt:

from distutils.core import setup, Extension 

setup(name="pysomap", 
     version="2007.07", 
     url ="http://web.vscht.cz/spiwokv/pysomap/", 
     description="A library for isometric feature mapping.", 
     license='Unknown', 
     author="Vojtech Spiwok", 
     py_modules=["floyd", "pysomap"], 
     ext_modules=[Extension('_floyd', ["floyd_wrap.c", "floyd.c"])] 
    ) 

bauen die _floyd Erweiterung (vorausgesetzt, Sie kompatible C-Compiler installiert haben ein Python distutils):

python setup.py build_ext --inplace 

Run demo.py:

python demo.py 

Calculating distance matrix ............ 2.24 s 
Using epsilon-isomap, epsilon = 0.500000, calculating 2-dimensional embedding 
Calculating graph matrix ............... 1.21 s 
Calculating the shortest path matrix ... 2.22 s 
Multidimensionally scalling ............ 7.11 s 
-------------------------------------------------- 
Total procedure ........................ 12.79 s 
+0

Das ist ziemlich genial. Ich konnte es nicht einmal schaffen, ein Architekturproblem zu beheben, das unter OSX manuell erstellt wurde, aber Ihr Setup setup.py in Kombination mit ARCHFLAGS funktionierte tatsächlich. Nicht dass ich persönlich diese Bibliothek benutzen würde, aber ich habe versucht, selbst eine Lösung für das OP zu finden. – jdi

0

Dieser Quellcode ist über 5 Jahre alt und der Build-Skript für floyd sieht hartcodiert python2.4 zu übernehmen.

Es scheint ziemlich klar, dass Ihr floyd Modul nicht erstellt wurde. Sie werden höchstwahrscheinlich zu dem Build-Schritt zurückkehren und sicherstellen müssen, dass Sie ordnungsgemäß _floyd.so generieren.

Wenn Sie es richtig gebaut, dann sollte dies nicht für Sie scheitern:
python -c "import _floyd"

1

ich auf den Code einen Blick hatte, weil Isomap ein cooler Algorithmus ist. Der Code sieht nicht so aus, als wäre er von jemandem geschrieben worden, der mit Python vertraut ist, und die ganze floyd-Erweiterung ist ziemlich schäbig - sie hat eigentlich nicht für mich gebaut, und ich bin mir ziemlich sicher, dass das dein Problem ist Import Ausnahme für das Modul und drucken Sie den Fehler aus, den Sie geben).

Ich habe einige hartcodierte Sachen in build_floyd.sh zu verschiedenen fest codierten Werten für mein System geändert. (Ein richtiges Build-System würde dies unnötig machen). Hier ist, was in meinem Ubuntu-System funktioniert hat. Ich habe getestet und es lief in Ordnung.

#!/bin/sh 
# run this script to generate library for Floyd's 
# algorithm library 

echo "generating input files using SWIG ..." 
swig -python floyd.i 

echo "compiling ..." 
# change compiler if you use other than gcc 
gcc -c floyd.c floyd_wrap.c -I/usr/include/python2.6 -fPIC 

echo "linking ..." 
ld -shared floyd.o floyd_wrap.o -o _floyd.so 

#echo "for SELinux you must run chcon ..." 
#chcon -t textrel_shlib_t _floyd.so 

Sie können auch die erste Zeile in demo.py-#!/usr/bin/env python ändern.