cffi embedding_init_code导入自定义py文件

问题描述

我正在尝试将Python代码转换为dll,在ffi.embedding_init_code下的以下代码中,我可以导入已通过pip或conda安装的软件包,例如cv2,numpy,pil等,但是我创建了python文件my_tools .py这在访问dll时出现错误“ ModuleNotfoundError:没有名为“ my_tools”的模块”

import re
import cffi
ffi = cffi.FFI()
with open('plugin.h') as f:
    include = f.read()

ffi.embedding_api(include)

ffi.set_source("my_plugin",re.sub(r'^extern(?=\s)','CFFI_DLLEXPORT',include,flags=re.M))

ffi.embedding_init_code("""
    from my_plugin import ffi,lib
    import keras_ocr
    import my_tools # as m_tools
    import logging
    import sys
    import cv2
    import numpy as np
    from PIL import Image
    import io
    import base64

    @ffi.def_extern()
    def hello(out_result):
        out_result=ffi.string(out_result)
        print("hello python="+str(out_result))
        return 0
""")
ffi.cdef("""
    char *strdup(const char *);
""")
ffi.compile(target="plugin-1.5.*",verbose=True)

下面是我的插件。h

extern int hello(char* out_result);

如何在这里导入自己创建的文件

解决方法

没有一个适合所有人的答案,但是一种快速的入门方法是将其添加为第一行 embedding_init_code

import sys; sys.path.insert(0,"/path/containing/the/python/files")