我正在尝试用C ++编写一个简单的模块并将其导入Python。但是,当我尝试使用import greet
导入模块时,出现ImportError: dynamic module does not define module export function (PyInit_greet)
错误。
在阅读了与此问题相关的另一个SO问题(here)后,我认为我可能遇到版本问题(因为我使用的是Python3.5)。但话说回来,我用来构建和安装的每个命令,我都在使用Python3.5,那么我怎么会遇到版本问题呢? (python3.5 build setup.py
和python3.5 setup.py install
)。
我正在尝试创建Python文档(here)中描述的简单项目的修改版本,一切正常,直到我尝试导入模块。
这是我的setup.py
文件:
from distutils.core import setup, Extension
greet_module = Extension('greet',
define_macros=[('MAJOR_VERSION','1'),
('MINOR_VERSION','0')],
include_dirs=['/usr/local/include'],
# clang: warning: libstdc++ is deprecated; move to
# libc++ with a minimum deployment target of OS X 10.9
sources=['greet.cpp'])
setup (name='Greet_Package',
version='1.0',
description='This is a demo package',
author='ralston',
author_email='null',
url='https://google.com',
long_description='''This is really just a demo package''',
ext_modules=[greet_module])
它可能与我的include_dirs
参数有关吗?我的Python3.5实际上并没有安装在那里,但我尝试将我的Python3.5路径放在include_dirs
中,但我得到了同样的错误。当我构建setup.py
时,这是我的输出:
running build
running build_ext
building 'greet' extension
creating build
creating build/temp.macosx-10.6-intel-3.5
/usr/bin/clang -fno-strict-aliasing -Wsign-compare -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -DMAJOR_VERSION=1 -DMINOR_VERSION=0 -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/3.5/include/python3.5m -c greet.cpp -o build/temp.macosx-10.6-intel-3.5/greet.o
creating build/lib.macosx-10.6-intel-3.5
/usr/bin/clang++ -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.5/greet.o -L/usr/lib -o build/lib.macosx-10.6-intel-3.5/greet.cpython-35m-darwin.so
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9
非常感谢任何帮助。