我有一个通用的shell脚本,被所有模块使用。
所有模块都会安装一个名为common
的通用pip包。
这个脚本大致是这样的:
common
utils
scripts
build
generic_build.sh
我发现可以通过在setup.py
中添加scripts
或console_scripts
参数来安装Python脚本,但是sh
文件似乎被忽略了,这意味着它们不会出现在安装的软件包中。
有什么想法吗?
如果要将Shell脚本打包到发布中,可以像将Python脚本一样将它们添加到scripts
列表中。例如:
# bash_scripts/spam.sh
#!/usr/bin/env bash
echo Running "$0"
用于打包 spam.sh
的简单设置脚本:
# setup.py
from setuptools import setup
setup(
name='spam',
scripts=['bash_scripts/spam.sh']
)
构建源码和二进制分发包都包括 spam.sh
:
$ python setup.py bdist_wheel | grep spam.sh
copying bash_scripts/spam.sh -> build/scripts-3.6
copying build/scripts-3.6/spam.sh -> build/bdist.linux-aarch64/wheel/spam-0.0.0.data/scripts
changing mode of build/bdist.linux-aarch64/wheel/spam-0.0.0.data/scripts/spam.sh to 755
adding 'spam-0.0.0.data/scripts/spam.sh'
$ python setup.py sdist | grep spam.sh
copying bash_scripts/spam.sh -> spam-0.0.0/bash_scripts
安装完成后,检查是否包含shell脚本:$ pip install dist/spam-0.0.0.tar.gz
...
$ pip show -f spam
Name: spam
Version: 0.0.0
Summary: UNKNOWN
Home-page: UNKNOWN
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Location: /data/gentoo64/home/u0_a82/.local/lib64/python3.6/site-packages
Requires:
Files:
../../../bin/spam.sh
spam-0.0.0.dist-info/DESCRIPTION.rst
spam-0.0.0.dist-info/INSTALLER
spam-0.0.0.dist-info/METADATA
spam-0.0.0.dist-info/RECORD
spam-0.0.0.dist-info/WHEEL
spam-0.0.0.dist-info/metadata.json
spam-0.0.0.dist-info/top_level.txt
setup.cfg
文件,我没有找到这种类型文件的等效技巧。是否可以从.cfg文件中执行bash脚本? - Alexis Cllmb这取决于您如何配置您的setup.py文件。 尝试将其添加为资源或其他类型的依赖项。
data_files=[('.',['INFO.txt']),
('additionalstuff',['additionalstuff/moredata.txt'])]
sh
脚本添加到scripts
列表中时,它们不会被忽略。显然,你的问题出在其他地方。考虑创建一个最小化、完整和可验证的示例。 - hoefling