python swig导入错误,如何解决?

问题描述 投票:0回答:1

我有一段python的代码,想用它来使用swig,于是我在linux上输入了以下几行。

1. swig -python Olympics.i
2. gcc -std=c99 -fPIC -c Olympics_wrap.c -I/usr/local/include/python3.6m
3. ld -shared Olympics.o Olympics_wrap.o -L/usr/local/include/python3.6m/ -o _Olympics.so

然后得到了一个名为Olympic.py的文件,我把它复制了下来 只是 那一个到我的项目,并写了进口奥运会,但我得到了一个错误,_Opympics.so是缺少的,所以我添加了它,但现在我得到。

Traceback (most recent call last):
  File "/../Olympics.py", line 1, in <module>
    import Olympics.py
  File "/../Olympics.py", line 26, in <module>
    _Olympics = swig_import_helper()
  File "/../Olympics.py", line 22, in swig_import_helper
    _mod = imp.load_module('_Olympics', fp, pathname, description)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/imp.py", line 243, in load_module
    return load_dynamic(name, filename, file)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/imp.py", line 343, in load_dynamic
    return _load(spec)
ImportError: dlopen(../_Olympics.so, 2): no suitable image found.  Did find:
    ../_Olympics.so: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00
    ../_Olympics.so: stat() failed with errno=25

我做错了什么?

python python-3.x swig
1个回答
0
投票

这通常发生在没有正确编译的时候,我不知道这样做是否可行,但我个人使用distutil的成功率更高...

做一个setup.py的python代码。

# setup.py
from distutils.core import setup, Extension
module = Extension('_Olympics', sources['Olympics.c','Olympics.i'])
setup(name='Olympics', ext_modules=[module], py_modules=["Olympics"])

然后进入你的终端,cd到有奥运会文件的目录。在这里,你可以Swig和编译完全在一行。

python setup.py build_ext --inplace

当它生成.py和.so后,首先在python中检查是否可以导入同一目录下的模块。如果成功的话,你应该可以把Olympic.py和Olympic.so移到另一个你想导入这个模块的目录下。

© www.soinside.com 2019 - 2024. All rights reserved.