setuptools“ eager_resources”到可执行目录

5 python cmake setuptools

我维护了一个Python实用工具,该工具可bpy作为Python模块安装。由于源代码的数量巨大,并且下载库需要花费很长时间,因此我选择将此模块提供为wheel

不幸的是,平台差异和Blender运行时期望有时会支持这一棘手问题。

目前,我的主要目标之一是将Blender插件脚本目录安装到正确的位置。该目录(以Blender API版本命名)必须与Python可执行文件位于同一目录中。

不幸的是,setuptools2.79目录的工作方式(或至少是我配置的方式)并不总是作为Python可执行文件的同级放置。它在虚拟环境之外的Windows平台上失败。

但是,我在setuptools文档中注意到,您可以指定eager_resources可以保证提取文件的位置。

https://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-resource-extraction https://setuptools.readthedocs.io/en/latest/pkg_resources.html#resource-extraction

文档中有很多挥手和行话,还有0个示例。我真的很困惑如何构造我的setup.py文件以保证资源提取。目前,我只是在整个2.79目录中将整个目录标记为“脚本” setuptools Extension并将其发送。

有没有一种方法可以编写我的setup.py模块并将其打包,以确保2.79在有人运行时目录的位置与当前正在运行的python可执行文件相同

py -3.6.8-32 -m pip install bpy

除了简单地“入侵”?我当时正在考虑编写一个install_requires模块,如果可能的话,它将简单地移动它,但是这会干扰用户的文件系统和某种黑客行为。但是,如果这不可能的话,这就是我要走的路线。

这是任何有兴趣的人的原始问题。

https://github.com/TylerGubala/blenderpy/issues/13

我的构建过程与此处答案中描述的过程相同

/sf/answers/3610319751/

sin*_*roc 0

也许尝试/data_files选项distutilssetuptools

您可以从添加data_files=[('mydata', ['setup.py'],)],setuptools.setup函数调用开始。构建一个轮子,然后安装它,看看是否可以mydata/setup.pysys.prefix.

在您的情况下,困难的部分是计算实际的目标目录(mydata在本例中)。它将取决于平台(Linux、Windows 等)、是否在虚拟环境中、是否是全局安装或本地安装(目前使用轮子实际上不可行,请参阅下面的更新)等等。

最后,当然,检查卸载时所有内容是否都被彻底删除。在使用虚拟环境时有点不必要,但在全局安装的情况下非常重要。


更新

看起来您的用例需要在安装包时sys.prefix执行自定义步骤(因为无法提前知道Python 解释器相对于的二进制文件的位置)。目前用轮子还无法做到这一点。您在本次讨论中已经亲眼目睹了这一点。

知道了这一点,我的建议是遵循Jan Vlcinsky在他对这个问题的回答的评论中的建议: 安装车轮后安装脚本

  • 向您的包添加一个额外的setuptools控制台入口点(我们称之为bpyconfigure)。

  • 指示您的软件包的用户在安装您的软件包后立即运行它 ( pip install bpy && bpyconfigure)。

  • 应该清楚地说明的目的bpyconfigure(在文档中,也可能在启动后在控制台中显示通知bpyconfigure),因为它会写入文件系统中pip install通常不写入的位置。

  • bpyconfigure应该弄清楚Python解释器在哪里,以及在哪里写入额外的数据。

  • 要写入的额外数据应打包为package_data,以便可以通过 找到它pkg_resources

  • 当然bpyconfigure --uninstall应该也是可以的!