如何使用setuptools修复python代码中的路径来构建一个可移植的包?
问题描述:
我正在跨不同的Linux和BSD发行版移植python库 此库使用setuptools打包。如何使用setuptools修复python代码中的路径来构建一个可移植的包?
的问题是,该代码使得在系统中的其他文件的引用,例如:
/bin/my-cmd
/etc/default/my-config.cfg
但是取决于Linux或BSD发行版,路径是不同的,例如:
/usr/local/bin/my-cmd
/etc/my-config.cfg
所以我想知道是否有一种方法可以在setup.py中编写一个预安装脚本来修复路径(用于前缀和配置文件),这样我可以使我的软件包变得可移植。
我希望能够在源代码中写一些模式,例如:
%%PREFIX%%/bin/my-cmd
而且在setup.py更换模式%%PREFIX%%
它安装之前的包,这可能吗?
感谢
答
要在编译时间解决这个问题,我们可以在setup.py自定义生成步骤,通过在项目中的所有Python文件迭代,并更换图案,但我发现最好的解决方法是修复在运行时路径中使用全局变量:
在我__init__.py
我:
然后我就可以通过使用引用文件位置:
my_cmd_path = PREFIX + '/bin/my-cmd'
答
尝试,这可能是它会帮助你。 __file__
将获得当前位置。
import os
os.path.join(os.path.dirname(__file__), 'bin/my-cmd')
但我可以在setup.py代码中的任何位置添加这个吗?或者setup.py有一个特殊的地方来放这些脚本?另外,如何检索安装软件包的前缀或操作系统,以便我可以知道要替换哪条路径? –
你的setup.py位于哪里? 'bin/my-cmd'? – Simplans
我不确定我是否理解这个问题。 setup.py是这个项目的一部分:https://github.com/helen-fornazier/compute-image-packages/tree/development –