如何在pip包中打包shell脚本

Web*_*ube 7 python pip

我在所有模块中都使用了通用的shell脚本。

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

common
   utils
     scripts
       build
         generic_build.sh
Run Code Online (Sandbox Code Playgroud)

我已经看到有一种方法可以通过setup.py使用scriptsconsole_scripts参数添加来安装python脚本。但是sh文件似乎被忽略了。表示它们不会最终出现在已安装的软件包中。

有任何想法吗?

hoe*_*ing 5

可以通过将Shell脚本添加到scripts列表中来将它们捆绑在一起,就像将它们作为python脚本一样。例:

# bash_scripts/spam.sh
#!/usr/bin/env bash
echo Running "$0"
Run Code Online (Sandbox Code Playgroud)

用于打包以下内容的简单设置脚本spam.sh

# setup.py
from setuptools import setup

setup(
    name='spam',
    scripts=['bash_scripts/spam.sh']
)
Run Code Online (Sandbox Code Playgroud)

构建源和二进制dists包括spam.sh

# bash_scripts/spam.sh
#!/usr/bin/env bash
echo Running "$0"
Run Code Online (Sandbox Code Playgroud)

安装后,检查外壳脚本是否包括:

# setup.py
from setuptools import setup

setup(
    name='spam',
    scripts=['bash_scripts/spam.sh']
)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@hoefling,这非常接近我正在寻找的东西!然而,我正在开发的项目使用了“setup.cfg”文件,并且我没有找到此类文件的等效技巧。是否可以从 .cfg 文件执行 bash 脚本? (3认同)

Pet*_*lla 0

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

 data_files=[('.',['INFO.txt']),
            ('additionalstuff',['additionalstuff/moredata.txt'])]
Run Code Online (Sandbox Code Playgroud)