如何使用Pythran调用其他Python文件中定义的自定义函数?
报错原因
Pythran 属于预编译(Ahead-of-Time)工具,编译阶段不会调用 Python 原生的模块查找逻辑,默认仅解析你主动传入的源文件,因此跨文件导入的自定义模块会被判定为不存在。
解决方法
方法1:同时传入所有依赖的源文件编译
如果你的项目目录结构如下:
项目根目录/ ├─ testpythran.py └─ calaTools/ └─ toolsTep.py
直接在项目根目录执行以下编译命令即可,把主文件和所有依赖的工具文件都传给Pythran:
pythran testpythran.py calaTools/toolsTep.py
方法2:指定模块搜索路径
如果你的依赖模块存放在其他目录,可通过-I参数给Pythran添加模块搜索路径,参数值填模块父目录的绝对路径即可:
# 示例:calaTools文件夹存放在/opt/my_py_modules/目录下 pythran -I /opt/my_py_modules/ testpythran.py calaTools/toolsTep.py
注意事项
- 被调用的工具文件中的函数不需要加
#pythran export注解,仅主文件需要对外暴露的函数加注解即可 - 建议把
from calaTools.toolsTep import *改成显式导入from calaTools.toolsTep import HelloWord,降低Pythran解析复杂度,避免不必要的编译错误 - 不要在工具函数中使用Pythran不支持的Python动态特性,会触发编译失败
内容的提问来源于stack exchange,提问作者杨钰德
相关产品推荐
相关产品推荐

