给大家的另一个问题-
所以我试图让一个名为 Pysomap 的程序工作(它基本上是 ISOMAP,但对于 python [http://web.vscht.cz/spiwokv/pysomap/]),我尽可能地遵循指示,在 Ubuntu 上构建它、Windows 和 Fedora(预建库),但似乎无法使其正常工作。在windows(这是首选的实现平台)上,每次我去python并导入pysomap时,它都会给我上面的错误。有人知道如何解决这个问题吗?
谢谢
-J
在 pysomap 目录中,创建一个 setup.py 文件,其内容如下:
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"])]
)
构建_floyd
扩展(假设您安装了 Python distutils 兼容的 C 编译器):
python setup.py build_ext --inplace
运行 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
我查看了代码,因为 Isomap 是一个很酷的算法。代码看起来不像是由熟悉 Python 的人编写的,整个 floyd 扩展模块编译有点粗制滥造——它实际上不是为我构建的,我很确定这是你的问题(他们抓住了为模块导入异常并打印出您给出的错误)。
我将一些硬编码的东西更改build_floyd.sh
为我系统的不同硬编码值。(适当的构建系统将使这变得不必要)。这是在我的 Ubuntu 系统中有效的方法。我测试了它运行正常。
#!/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
您可能还必须将第一行更改demo.py
为#!/usr/bin/env python
.
该源代码已有 5 年以上的历史,floyd 的构建脚本看起来采用硬编码的 python2.4。
很明显您的floyd
模块没有构建。您很可能必须返回构建步骤并确保正确生成_floyd.so
.
如果您正确构建它,那么这对您来说应该不会失败:
python -c "import _floyd"