如何使用setuptools构建一个可移植的包来修复python代码中的路径?
我正在跨不同的Linux和BSD发行版移植python库 此库是使用setuptools打包的 问题是代码引用了系统中的其他文件,例如:如何使用setuptools构建一个可移植的包来修复python代码中的路径?,python,setuptools,setup.py,easy-install,Python,Setuptools,Setup.py,Easy Install,我正在跨不同的Linux和BSD发行版移植python库 此库是使用setuptools打包的 问题是代码引用了系统中的其他文件,例如: /bin/my-cmd /etc/default/my-config.cfg 但根据Linux或BSD发行版的不同,路径不同,例如: /usr/local/bin/my-cmd /etc/my-config.cfg 因此,我想知道是否有办法在setup.py中编写一个预安装脚本来修复路径(前缀和配置文件),这样我就可以使我的包可移植 我希望能够在源代码中编
/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%%
,这可能吗
谢谢试试这可能会对你有所帮助<代码>文件将获取当前位置
import os
os.path.join(os.path.dirname(__file__), 'bin/my-cmd')
要在构建时修复此问题,我们可以在setup.py中添加自定义构建步骤,迭代项目中的所有python文件并替换模式,但我发现的最佳解决方案是在运行时使用全局变量修复路径: 在我的
\uuuu init\uuuuuuuy.py
中,我有:
import platform
if platform.system() == 'FreeBSD':
PREFIX = '/usr/local'
else:
PREFIX = ''
然后,我可以使用以下方法引用文件位置:
my_cmd_path = PREFIX + '/bin/my-cmd'
但是我可以将其添加到setup.py代码中的任何位置吗?或者setup.py有专门的地方放置这些脚本吗?另外,如何检索安装包的前缀或操作系统,以便知道要替换的路径?setup.py位于何处?“bin/my cmd'?我不确定我是否理解这个问题。setup.py是此项目的一部分:setup.py和“my cmd”位于同一目录中,对吗?不,setup.py位于我进行git克隆的文件夹(任何文件夹),my cmd是来自系统的命令,例如“ifconfig”,代码调用/bin/ifconfig,但在某些系统中,它可能位于/usr/local/bin/ifconfig或/sbin/ifconfig