简体   繁体   中英

Error importing c module compiled with Cython into python module on Mac

I have a Cython module compiled from pyx files to c files that I am trying to import and use in a python module. I'm running python 3.6 on a Mac. When I run gcc -v the output is:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr - -with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Running python setup.py build and python setup.py install gives no errors, and the .so and .c files for the corresponding files appear in the right directory, which is on the path.

When I try to import the module, I get an error in the init file, from a line that tries to import another submodule:

from . import subModule

I've tried updating python and Cython, and I've made sure that gcc is in user/lib.

This is my setup.py file:

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)

This is the error message:

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

The thirdModule in question has a .c file and a .so file that correspond to the .pyx file, and as far as I can tell everything is order there.

module's init .py:

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

from . import subModule

subModule:

import thirdModule

thirdModule.doSomething()

third module:

import re
from . import anotherModule

def doSomething:
    #code that does something

Edit : In an attempt to see if the compiler is at fault, I tried to manually compile the .c file of thirdModule with "gcc thirdModule", and got the following error:

Undefined symbols for architecture x86_64:

This seems to suggest that the issue is compiler-related, but I still haven't found the solution.

Any help would be much appreciated.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM