我有一个从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:
这似乎表明该问题与编译器相关,但是我仍然没有找到解决方案。
任何帮助将不胜感激。
答案 0 :(得分:0)
事实证明@ead是正确的,问题是该模块具有隐式的相对导入,而在python 3中不再允许使用这种导入。