问题描述
我正在尝试将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")