在Mac上将用Cython编译的C模块导入python模块时出错

时间:2019-08-22 08:50:15

标签: python c macos cython

我有一个从pyx文件编译为c文件的Cython模块,我正在尝试将这些文件导入python模块并在其中使用。我在Mac上运行python 3.6。当我运行gcc -v时,输出为:

使用以下命令配置--prefix = / Library / Developer / CommandLineTools / usr--with-gxx-include-dir = / Library / Developer / CommandLineTools / SDKs / MacOSX10.14.sdk / usr / include / c ++ / 4.2 .1 Apple LLVM版本10.0.1(clang-1001.0.46.4)目标:x86_64-apple-darwin18.7.0线程模型:posix InstalledDir:/ Library / Developer / CommandLineTools / usr / bin

运行python setup.py build和python setup.py install不会出错,并且相应文件的.so和.c文件显示在正确的目录中,该目录位于路径上。

当我尝试导入模块时,在尝试导入另一个子模块的行中,在 init 文件中出现错误:

from . import subModule

我尝试更新python和Cython,并确保gcc在用户/ lib中。

这是我的setup.py文件:

from Cython.Build import cythonize


  setupArgs = dict(
  name="module",
  version="1.1.0",
  description=description,
  url="https://github.com/XXXX/XXXXX/module",
  author="CTcue",
  author_email="info@XXXXXX.com",
  ext_modules=cythonize(["module/*.pyx"]),
)


# Use distutils setup
from distutils.core import setup

setup(**setupArgs)

这是错误消息:

 File "module/subModule.pyx", line 4, in init module.subModule
ModuleNotFoundError: No module named 'thirdModule'

有问题的thirdModule具有一个.c文件和一个与.pyx文件相对应的.so文件,据我所知,那里的一切都是有序的。

模块的 init .py:

__title__     = 'Pseudonomizer'
__version__   = '1.0.2'
__author__    = 'CTcue'
__license__   = 'Proprietary'
__copyright__ = 'Copyright 2016 CTcue'

from . import subModule

subModule:

import thirdModule

thirdModule.doSomething()

第三个模块:

import re
from . import anotherModule

def doSomething:
    #code that does something

编辑:试图查看编译器是否有错误,我尝试使用“ gccthirdModule”手动编译thirdModule的.c文件,并出现以下错误:

Undefined symbols for architecture x86_64:

这似乎表明该问题与编译器相关,但是我仍然没有找到解决方案。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

事实证明@ead是正确的,问题是该模块具有隐式的相对导入,而在python 3中不再允许使用这种导入。