如何调用包含依赖的.pyz文件中的指定函数?
调用.pyz文件内函数的正确方法
.pyz是打包了依赖的Python zip可执行文件,你之前用<python path> my_pyz_file.pyz myscript.py的方式无法生效,因为这种写法是把myscript.py作为参数传给.pyz的入口脚本,而非让自定义脚本导入.pyz内的模块。下面是两种可行的解决方法:
方法一:将.pyz添加到模块搜索路径
修改你的自定义脚本,把.pyz文件路径加入Python的模块搜索路径,之后直接导入目标模块即可:
import sys # 将.pyz文件的绝对/相对路径添加到搜索路径最前面 sys.path.insert(0, "./my_pyz_file.pyz") # 导入.pyz内的目标模块(注意模块名要和.pyz内的实际模块名一致) import function_from_pyz if __name__ == "__main__": function_from_pyz.runJob()
运行命令直接执行自定义脚本即可:
python myscript.py
方法二:用importlib动态加载.pyz文件
如果不确定.pyz内的模块名,或者需要更灵活的加载方式,可以用importlib模块直接加载.pyz文件:
import importlib.util import sys # 指定.pyz文件的路径 pyz_file_path = "./my_pyz_file.pyz" # 创建模块规范,第一个参数是你要给模块起的名称(可自定义) spec = importlib.util.spec_from_file_location("function_from_pyz", pyz_file_path) # 根据规范创建模块对象 function_from_pyz = importlib.util.module_from_spec(spec) # 将模块加入sys.modules,确保后续导入正常 sys.modules["function_from_pyz"] = function_from_pyz # 执行模块加载 spec.loader.exec_module(function_from_pyz) if __name__ == "__main__": function_from_pyz.runJob()
同样用以下命令运行:
python myscript.py
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

