python distutils 在模块目录中包含脚本文件
在setup.py中,怎么才能最好地包含一个“辅助”shell脚本,让它可以被一个Python模块使用呢?我不想把它当作一个独立的脚本来包含,因为它并不是单独运行的。
另外,data_files只是把东西复制到安装路径(而不是模块的安装路径),所以这似乎也不是最好的方法。
我想问的是:有没有一种通用的方法,可以在Python的distutils包中包含非Python(非C)的脚本或二进制文件呢?
3 个回答
0
另一个问题可能是,包含 Bash 脚本的这些 pypi 包在比如 Windows 系统上可能无法正常运行?
3
把它放到 MANIFEST.in 文件里,像这样:
include mycode/myscript.sh
这里有一个示例 Python 包,它使用了一些辅助脚本:
https://github.com/pminkov/kubeutils
看看这个文件,它会运行一些 shell 脚本:
https://github.com/pminkov/kubeutils/blob/master/kubeutils/kutils.py
1
我觉得没有办法把一个shell脚本打包成一个文件。
在我的一个项目中,我特别需要一个shell脚本,因为我需要把它作为参数传递给另一个工具,而那个工具只接受shell脚本,不接受python脚本。
所以我最后想了个办法,让python动态地生成myscript.sh这个脚本。
代码大概是这样的:
bash_script_name = cwd + "/myscript.sh"
bash_script_file_obj = open(bash_script_name, 'w')
bash_script_file_obj.write(text_of_myscript)
bash_script_file_obj.close()
os.chmod(bash_script_name, 0755)
subprocess.call([another_tool, bash_script_name])
os.remove(bash_script_name)
虽然这个方法不是特别优雅,但确实能用。如果你可以选择用python来写脚本,我肯定推荐你用python。