setup.py 和将文件添加到 /bin/

89 投票
4 回答
58119 浏览
提问于 2025-04-16 10:52

我搞不清楚怎么让 setup.py 把一个脚本添加到用户的 /bin/usr/bin 之类的地方。

比如,我想把 myscript.py 加到 /usr/bin,这样用户就可以在任何目录下调用 myscript.py 了。

4 个回答

20

要从setuptools和PyPI的基础设施中获得一个可用的命令行工具,有两种方法:

  1. 使用“scripts”关键字参数
    这个方法可以让你在命令行中执行任何你想要的东西,可以是Python脚本、shell脚本,或者其他完全不同的东西。
  2. 使用“console_scripts”入口点
    这个方法允许你直接把Python函数(而不是脚本!)注册为可以在命令行中访问的工具。
78

可以考虑使用 console_scripts

from setuptools import setup
setup(name='some-name',
      ...
      entry_points = {
              'console_scripts': [
                  'command-name = package.module:main_func_name',                  
              ],              
          },
)

这里的 main_func_name 是你主模块中的一个主要函数。
command-name 是它在 /usr/local/bin/ 下保存的名字(通常是这样)。

45

Python的官方文档在安装脚本这一部分有解释。

脚本是包含Python源代码的文件,目的是从命令行启动它们。

setup(...,
      scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
)

正如这里提到的,除了脚本,还有一种entry_points机制,这种方式在不同平台上更通用。

使用entry_points,你可以把命令行工具的名字和你选择的一个函数连接起来,而scripts则可以指向任何文件(比如一个shell脚本)。

撰写回答