Cython 在单独的目录中编译模块

Posted

技术标签:

【中文标题】Cython 在单独的目录中编译模块【英文标题】:Cython compile module in separate directory 【发布时间】:2018-03-21 16:28:11 【问题描述】:

我是 cython 的新手。

我有以下目录结构。

cython_program/
cython_program/helloworld.py
cython_program/lib/printname.py

helloworld.py

import lib.printname as name

def printname():
    name.myname()

printname.py:

def myname():
    print("this is my name")

setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [
    Extension("helloworld",  ["helloworld.py"]),
    Extension("mod",  ["./lib/printname.py"]),
]

setup(
    name = 'My Program',
    cmdclass = 'build_ext': build_ext,
    ext_modules = ext_modules
)

我遇到的问题是,当我在cython_program 目录中使用python setup.py build_ext --inplace 编译我的程序时。它确实成功编译了程序,并在 lib 文件夹中生成了一个printname.c 文件。

但是当我将 printname.py 和 helloworld.py 移动到单独的文件夹以确保我的 cython 编译代码正在运行时。它给了我以下错误ImportError: No module named lib.printname

为什么不使用主helloworld.py 文件编译模块(lib.printname)?

注意:如果我将 helloworld.py 和 printname.py 保存在同一个文件夹中,这可以正常工作。

提前致谢。

【问题讨论】:

考虑接受你自己的答案... 【参考方案1】:

这是setup.py 中的一个简单问题。

更改了这一行:

Extension("mod",  ["./lib/printname.py"]),

到这里:

Extension("lib.printname",  ["./lib/printname.py"]),

【讨论】:

以上是关于Cython 在单独的目录中编译模块的主要内容,如果未能解决你的问题,请参考以下文章

无法将 cpplist 导入 Cython?

使用 gcc 编译 cython:#include "ios" 中没有这样的文件或目录

cython与python的不同都有哪些

将PCL链接到Cython C ++模块

如何打包 cython 模块?

python / cython编译pyx:致命错误:capsule.h:没有这样的文件或目录