如何将shell脚本打包到pip包中

问题描述 投票:0回答:3

我有一个在所有模块中使用的通用 shell 脚本。

所有模块都安装一个名为

common
的通用 pip。 剧本是这样的

common
   utils
     scripts
       build
         generic_build.sh

我看到有一种方法可以通过使用

setup.py
scripts
参数添加到
console_scripts
来安装 python 脚本。但
sh
文件似乎被忽略。这意味着它们最终不会出现在已安装的包中。

有什么想法吗?

python pip
3个回答
21
投票

Shell 脚本可以通过将它们添加到

scripts
列表中来捆绑在发行版中,就像它们是 python 脚本一样。示例:

# 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

0
投票

这取决于您如何配置 setup.py 文件。 尝试将其添加为资源或其他类型的依赖项

 data_files=[('.',['INFO.txt']),
            ('additionalstuff',['additionalstuff/moredata.txt'])]

0
投票

这是一个示例:https://github.com/kamangir/blue-options

pip install blue_options

然后将此行添加到您的 ~/.bash_profile 或 ~/.bashrc 中,

source $(python -m blue_options locate)/.bash/blue_options.sh

并使用它,

function func() {
    local options=$1

    local var=$(abcli_options "$options" var default)
    local key=$(abcli_options_int "$options" key 0)

    [[ "$key" == 1 ]] &&
        echo "var=$var"
}
© www.soinside.com 2019 - 2024. All rights reserved.