如何将一个shell脚本打包成pip包

18

我有一个通用的shell脚本,被所有模块使用。

所有模块都会安装一个名为common的通用pip包。 这个脚本大致是这样的:

common
   utils
     scripts
       build
         generic_build.sh

我发现可以通过在setup.py中添加scriptsconsole_scripts参数来安装Python脚本,但是sh文件似乎被忽略了,这意味着它们不会出现在安装的软件包中。

有什么想法吗?


1
当将sh脚本添加到scripts列表中时,它们不会被忽略。显然,你的问题出在其他地方。考虑创建一个最小化、完整和可验证的示例 - hoefling
感谢,已解决。 - WebQube
2个回答

20

如果要将Shell脚本打包到发布中,可以像将Python脚本一样将它们添加到scripts列表中。例如:

```python { "name": "my-package", ... "scripts": [ "path/to/my/script.sh" ], ... } ```
# 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

在我的端上,在“文件:”下没有返回任何内容,我该怎么办? - alper
3
谢谢@hoefling,这非常接近我要找的!但是我正在处理的项目使用setup.cfg文件,我没有找到这种类型文件的等效技巧。是否可以从.cfg文件中执行bash脚本? - Alexis Cllmb

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接