You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PyPI打包Python工具实现无需python3和.py的命令行调用

实现Python命令行工具并通过PyPI发布的步骤

要实现pip install后直接用命令名调用的效果,核心是通过Python打包工具配置控制台入口点,无需手动处理chmod权限,以下是具体步骤:

1. 整理项目结构

先把项目调整为标准Python包结构:

mycli/
    __init__.py
    cli.py
pyproject.toml
README.md
  • mycli是你的包名(对应最终的packageName)
  • cli.py存放命令行逻辑代码

2. 编写命令行核心逻辑

在cli.py里实现你的命令行功能,比如用Python标准库argparse处理参数:

import argparse

def main():
    parser = argparse.ArgumentParser(description="我的命令行工具")
    parser.add_argument("--name", help="输入名称")
    args = parser.parse_args()
    
    if args.name:
        print(f"你好, {args.name}!")
    else:
        print("欢迎使用我的命令行工具!")

if __name__ == "__main__":
    main()

如果追求更简洁的语法,也可以用click库,安装click后代码会更优雅,但argparse无需额外依赖。

3. 配置打包文件(关键)

创建pyproject.toml(PEP 621推荐的现代打包配置文件),内容如下:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "mycli"
version = "0.1.0"
authors = [
  { name="你的名字", email="你的邮箱" }
]
description = "我的第一个Python命令行工具"
readme = "README.md"
requires-python = ">=3.7"

[project.scripts]
mycli = "mycli.cli:main"

重点是[project.scripts]部分:mycli是你要在终端调用的命令名,mycli.cli:main表示指向mycli包下cli.py文件里的main函数。

如果习惯用旧版的setup.py,也可以这样写:

from setuptools import setup

setup(
    name="mycli",
    version="0.1.0",
    packages=["mycli"],
    entry_points={
        "console_scripts": [
            "mycli = mycli.cli:main",
        ]
    },
)

4. 打包并上传到PyPI

安装打包工具

pip install build twine

生成包文件

python -m build

执行后会在dist目录下生成.tar.gz和.whl两种格式的包。

上传到PyPI

twine upload dist/*

按照提示输入你的PyPI账号密码即可完成发布。

5. 验证效果

上传成功后,在任意终端执行:

pip install mycli

安装完成后直接输入命令:

mycli --name 张三

就能看到输出你好, 张三!,完全不需要输入python3、带.py后缀,也不用进入项目目录。

为什么不用手动chmod?

通过entry_points(或project.scripts)配置后,pip在安装时会自动为生成的可执行脚本添加执行权限,不管是Linux/macOS还是Windows系统,都不需要手动修改权限。

内容的提问来源于stack exchange,提问作者PatzEdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07