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

Mj1*_*992 2 python cython cythonize

我是cython的新手。

我有以下目录结构。

cython_program/
cython_program/helloworld.py
cython_program/lib/printname.py
Run Code Online (Sandbox Code Playgroud)

helloworld.py

import lib.printname as name

def printname():
    name.myname()
Run Code Online (Sandbox Code Playgroud)

printname.py:

def myname():
    print("this is my name")
Run Code Online (Sandbox Code Playgroud)

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
)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

提前致谢。

Mj1*_*992 5

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

更改此行:

Extension("mod",  ["./lib/printname.py"]),
Run Code Online (Sandbox Code Playgroud)

为此:

Extension("lib.printname",  ["./lib/printname.py"]),
Run Code Online (Sandbox Code Playgroud)