Flow Launcher Python插件依赖带C扩展的pyd文件的跨环境运行通用解决方案求助
Flow Launcher Python插件依赖带C扩展的pyd文件的跨环境运行通用解决方案求助
各位大佬好,我正在给Flow Launcher写一个Python插件,用到的某个依赖包含编译成pyd文件的C扩展(可能术语说的不对,我对这块不是特别熟)。现在遇到的问题是,Flow Launcher要求插件必须打包自身依赖,但这个依赖的pyd文件会因为操作系统和架构不匹配找不到——我用的具体依赖是msgspec。
先跟大家说下Flow Launcher的Python插件依赖通常怎么处理:一般会把依赖打包到lib文件夹里,然后在插件主文件开头加这段代码,把lib目录加到Python路径里:
import os import sys parent_folder_path = os.path.abspath(os.path.dirname(__file__)) sys.path.append(parent_folder_path) sys.path.append(os.path.join(parent_folder_path, "lib"))
另外关于Flow Launcher的几个重要信息:
- 仅支持Windows系统
- 可以选择使用的Python版本,但默认会安装并使用3.11的嵌入式版本
我已经尝试了几种方案,但都没解决问题:
- 一开始我想在启动时检查pyd文件是否存在,如果找不到就强制重装msgspec,但问题是Flow默认的嵌入式Python 3.11不带pip,这条路走不通。
- 之后我尝试直接用setup.py安装,最接近成功的是运行这条命令:
但这么做会把msgspec装到嵌入式Python的全局环境里,很容易引发版本冲突,而且这种方式已经被弃用了,不是所有库都适用。<embedded python executable path> -c "__import__('sys').path.append(str(__import__('pathlib').Path(__import__('os').getcwd()).parent));__import__('sys').path.append(str(__import__('pathlib').Path(__import__('os').getcwd())));import runpy; runpy.run_module('setup')" install - 我还试过想把所有支持架构的pyd文件都打包进去,但目前只在这个依赖的仓库提了个issue,还没进展。
补充一下:我发现其他带类似C扩展的依赖也有这个问题,所以希望能找到一个通用的解决方案,不是只针对msgspec的。
备注:内容来源于stack exchange,提问作者cibere
相关产品推荐
相关产品推荐

