如何使用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') 
+0

但我可以在setup.py代码中的任何位置添加这个吗?或者setup.py有一个特殊的地方来放这些脚本?另外,如何检索安装软件包的前缀或操作系统,以便我可以知道要替换哪条路径? –

+0

你的setup.py位于哪里? 'bin/my-cmd'? – Simplans

+0

我不确定我是否理解这个问题。 setup.py是这个项目的一部分:https://github.com/helen-fornazier/compute-image-packages/tree/development –