python - 如何将 shell 脚本打包到 pip 包中
问题描述
我有一个用于所有模块的通用 shell 脚本。
所有模块都安装了一个名为common
. 脚本是这样的
common
utils
scripts
build
generic_build.sh
我已经看到有一种方法可以通过添加到setup.py
使用scripts
或console_scripts
参数来安装 python 脚本。但sh
文件似乎被忽略了。这意味着它们最终不会出现在已安装的软件包中。
有任何想法吗?
解决方案
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
推荐阅读
- sql - 无法将查询从 Oracle SQL 传输到具有多个连接的 MS SQL
- c# - 仅为强制 id 而非属性的可选 id 添加必需的验证属性
- python-3.x - 如何在 python 中将二进制转换为 ASCII 而不给我另一种语言的输出?
- c++ - 在 Ubuntu 16.04 和 Ubuntu 18.04 上构建 C++ RTMAPS 包
- ruby-on-rails - Rails 嵌套表单不更新。strong_params 设置正确
- python - 剪切并保存通过颜色识别的对象
- reactjs - 如何从两个不同的 API 中获取 Object Json 类型中的两个值?
- javascript - 在 Google Cloud Bucket Upload 之前解决 Promise
- sbt - flink 使用流 sql 查询上传作业时的问题
- java - 如何将填充的 JSP 写入文件系统?