setuptools "eager_resources" 到可执行目录
setuptools "eager_resources" to executable directory
我维护了一个 Python 实用程序,它允许 bpy
作为 Python 模块安装。由于 spurce 代码的庞大,以及下载库所需的时间长度,我选择以 wheel
.
的形式提供此模块
不幸的是,平台差异和 Blender 运行时期望有时会导致对此的支持变得棘手。
目前,我的一大目标是将 Blender 插件脚本目录安装到正确的位置。该目录(仅以 Blender API 版本命名)必须与 Python 可执行文件位于同一目录中。
不幸的是,setuptools
的工作方式(或者至少是我配置它的方式)2.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
文件以保证资源提取。目前,我只是在 setuptools
Extension
中将整个 2.79
目录标记为 "scripts" 并发送它。
有没有办法编写我的 setup.py
并打包我的模块,以保证 2.79
目录的位置与当前 运行 python 可执行文件相同当有人跑步时
py -3.6.8-32 -m pip install bpy
除了"hacking it in"?我正在考虑编写一个 install_requires
模块,如果可能的话,它会简单地移动它,但这会破坏用户的文件系统,而且有点老套。然而,如果这被证明是不可能的,这就是我要走的路。
这里是任何感兴趣的人的原始问题。
https://github.com/TylerGubala/blenderpy/issues/13
我的构建过程与我在此处的回答中描述的过程相同
也许试试 data_files
option of distutils
/setuptools
。
您可以先将 data_files=[('mydata', ['setup.py'],)],
添加到 setuptools.setup
函数调用中。建造一个轮子,然后安装它,看看是否可以在 sys.prefix
.
的某个地方找到 mydata/setup.py
在您的情况下,困难的部分将是计算实际的目标目录(本例中为 mydata
)。这将取决于平台(Linux、Windows 等),是否在虚拟环境中,是全局安装还是本地安装(目前轮子实际上不可行,请参阅下面的更新)等等。
当然,最后,请检查卸载时是否已将所有内容彻底删除。在使用虚拟环境时有点不必要,但在全局安装的情况下非常重要。
更新
看起来您的用例需要在 安装时间 您的包的自定义步骤(因为 Python 解释器的二进制文件相对于 sys.prefix
不能提前知道)。目前无法使用 wheels 完成此操作。这个discussion.
你自己看过
知道这一点,我的建议是遵循 Jan Vlcinsky 在他对这个问题的回答的评论中的建议:
Post install script after installing a wheel.
向您的程序包添加一个额外的 setuptools
控制台入口点(我们称之为 bpyconfigure
)。
指示您的软件包的用户在安装您的软件包 (pip install bpy && bpyconfigure
) 后立即 运行。
应该明确说明 bpyconfigure
的目的(在文档中,也可能在启动 bpyconfigure
后立即在控制台中显示为通知),因为它会写入pip install
通常不写入的文件系统位置。
bpyconfigure
应该弄清楚 Python 解释器在哪里,以及在哪里写入额外数据。
多写的数据要打包成package_data
,这样可以用pkg_resources
.
找到
当然bpyconfigure --uninstall
应该也有!
我维护了一个 Python 实用程序,它允许 bpy
作为 Python 模块安装。由于 spurce 代码的庞大,以及下载库所需的时间长度,我选择以 wheel
.
不幸的是,平台差异和 Blender 运行时期望有时会导致对此的支持变得棘手。
目前,我的一大目标是将 Blender 插件脚本目录安装到正确的位置。该目录(仅以 Blender API 版本命名)必须与 Python 可执行文件位于同一目录中。
不幸的是,setuptools
的工作方式(或者至少是我配置它的方式)2.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
文件以保证资源提取。目前,我只是在 setuptools
Extension
中将整个 2.79
目录标记为 "scripts" 并发送它。
有没有办法编写我的 setup.py
并打包我的模块,以保证 2.79
目录的位置与当前 运行 python 可执行文件相同当有人跑步时
py -3.6.8-32 -m pip install bpy
除了"hacking it in"?我正在考虑编写一个 install_requires
模块,如果可能的话,它会简单地移动它,但这会破坏用户的文件系统,而且有点老套。然而,如果这被证明是不可能的,这就是我要走的路。
这里是任何感兴趣的人的原始问题。
https://github.com/TylerGubala/blenderpy/issues/13
我的构建过程与我在此处的回答中描述的过程相同
也许试试 data_files
option of distutils
/setuptools
。
您可以先将 data_files=[('mydata', ['setup.py'],)],
添加到 setuptools.setup
函数调用中。建造一个轮子,然后安装它,看看是否可以在 sys.prefix
.
mydata/setup.py
在您的情况下,困难的部分将是计算实际的目标目录(本例中为 mydata
)。这将取决于平台(Linux、Windows 等),是否在虚拟环境中,是全局安装还是本地安装(目前轮子实际上不可行,请参阅下面的更新)等等。
当然,最后,请检查卸载时是否已将所有内容彻底删除。在使用虚拟环境时有点不必要,但在全局安装的情况下非常重要。
更新
看起来您的用例需要在 安装时间 您的包的自定义步骤(因为 Python 解释器的二进制文件相对于 sys.prefix
不能提前知道)。目前无法使用 wheels 完成此操作。这个discussion.
知道这一点,我的建议是遵循 Jan Vlcinsky 在他对这个问题的回答的评论中的建议: Post install script after installing a wheel.
向您的程序包添加一个额外的
setuptools
控制台入口点(我们称之为bpyconfigure
)。指示您的软件包的用户在安装您的软件包 (
pip install bpy && bpyconfigure
) 后立即 运行。应该明确说明
bpyconfigure
的目的(在文档中,也可能在启动bpyconfigure
后立即在控制台中显示为通知),因为它会写入pip install
通常不写入的文件系统位置。bpyconfigure
应该弄清楚 Python 解释器在哪里,以及在哪里写入额外数据。多写的数据要打包成
package_data
,这样可以用pkg_resources
. 找到
当然
bpyconfigure --uninstall
应该也有!