Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用setuptools构建一个可移植的包来修复python代码中的路径?_Python_Setuptools_Setup.py_Easy Install - Fatal编程技术网

如何使用setuptools构建一个可移植的包来修复python代码中的路径?

如何使用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中编写一个预安装脚本来修复路径(前缀和配置文件),这样我就可以使我的包可移植 我希望能够在源代码中编

我正在跨不同的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中编写一个预安装脚本来修复路径(前缀和配置文件),这样我就可以使我的包可移植

我希望能够在源代码中编写一些模式,例如:

%%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