【发布时间】:2014-04-20 01:35:22
【问题描述】:
我们正在为多个 3d 应用程序创建一个软件扩展插件。对于我们无法为其明确编写插件的平台,我们正在开发一个 cpython 扩展,只要它支持 Python,它就允许客户将我们的功能放入他们最喜欢的 3d 应用程序中。我们的想法是使用我们现有的安装程序来安装 python 扩展,使其能够在各种具有嵌入式 python 支持的 3d 应用程序以及任何常规 python 安装中自动访问。
将我们的扩展安装到系统 python 中并不是一个真正的选择,因为许多应用程序(尤其是在 Windows 上)都带有它们自己的 python 安装。到目前为止,像魅力一样起作用的是安装到一个公共位置并将其添加到 PYTHONPATH。这样做的好处是所有 python 实例,无论是否嵌入,似乎都会检查该路径并加载我们的扩展。这样做的缺点是所有 python 实例,无论它们是哪个版本,都会检查该路径。因此,如果我在那里放置一个 python 2.7 扩展,它将很好地加载到 python 2.7 的所有实例中,但所有其他版本都会抱怨。
有没有一种分发 python 扩展的方法,以便我可以保留 PYTHONPATH 方式所具有的良好属性,但提供多个 python 版本的实现?
由于没有二进制扩展的纯 python 模块似乎可以对版本做出反应,所以我考虑过利用它。这个想法是实际加载一个常规的 python 模块来查询版本并选择要导入的正确二进制文件。这样做的唯一方法似乎是,检查版本,将路径添加到搜索路径的适当扩展名,导入它(我猜是使用不同的名称)并为扩展名中的每个函数编写一个相同的 python 函数这只是将函数调用修补到扩展。不过,这似乎有点浪费。
我确实注意到了“How do I distribute precompiled extension modules for Windows on pypi for multiple versions of Python?”这个问题,但它似乎是特定于 pypi 的。
非常感谢任何关于什么是好的策略的见解!
【问题讨论】: