这是我试图编译和安装的 python 包的链接。我已经尝试了几个小时可以在网上找到的东西,但无法克服ImportError.
包装内有以下内容。
它的 setup.py 有以下内容。这里有两个模块。一个是python封装包sparse_learning,另一种是名为AC扩展模块proj_module。
我按照此处描述的步骤https://docs.python.org/3.6/extending/building.html在 Ubuntu 18.04 上编译和安装。没有错误信息。
须藤 python3 setup.py build_ext --inplace
须藤 python3 setup.py 安装
然后,当我尝试加载 C 扩展模块时proj_module,会出现错误“ImportError:动态模块未定义模块导出功能”。
python3 -c "导入 proj_module"
我尝试应用在线找到的解决方案,包括使用 卸载 Python2 sudo apt purge python2.7-minimal,或将 python3 站点包路径添加到 bashrc。然而,他们都没有工作。

我只知道它最初是为 Python 2 编写的。然后对其进行了两次修改main_wrapper.c,以便为 Python 3 运行。它们在我看来是正确的......
看起来您在这里的 Python 3 模块中混入了一些 Python 2 风格的代码。你只需要更换
PyMODINIT_FUNC initproj_module() {
和
PyMODINIT_FUNC PyInit_proj_module() {
在您的main_wrapper.c文件中。
小智 8
使用时pybind11,此错误可能表明给出的模块名称与PYBIND11_MODULE库的文件名不匹配。
以图书馆为例:
lib_abc.cpython-311-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
应使用以下模块名称生成:
PYBIND11_MODULE(lib_abc, handle)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当您使用 Cython 和 CMake 等构建系统时,也可能会发生此错误。在 中PyInit_<modname>,modname应与文件名匹配。例如,您可能要求 Cython 创建extension目标,但 CMake 可能会libextension.so从中生成。然后,当您在 Python 中导入时libextension,它会查找,PyInit_libextension但 Cython 将生成PyInit_extension.
| 归档时间: |
|
| 查看次数: |
14246 次 |
| 最近记录: |