我维护了一个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
我的构建过程与此处答案中描述的过程相同
也许尝试/data_files选项distutilssetuptools。
您可以从添加data_files=[('mydata', ['setup.py'],)],到setuptools.setup函数调用开始。构建一个轮子,然后安装它,看看是否可以mydata/setup.py在sys.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应该也是可以的!