如何构建Python项目,实现安装后直接调用foo/bar/baz命令?
调整项目结构实现直接调用CLI命令
第一步:重构项目目录结构
把核心依赖代码(utilities.py、api_1.py等)统一放到一个Python包中,比如命名为core,调整后的结构如下:
your_package/ ├── core/ │ ├── __init__.py │ ├── utilities.py │ ├── api_1.py │ ├── api_2.py │ └── api_3.py ├── foo.py ├── bar.py ├── baz.py └── pyproject.toml
第二步:修改入口脚本的导入路径
在foo.py、bar.py、baz.py中,把原来对核心代码的导入路径改成从core包导入,示例如下:
# foo.py 示例 from core.utilities import some_util_func from core.api_1 import some_api_func def main(): # 原有的CLI逻辑 pass if __name__ == "__main__": main()
第三步:配置控制台脚本(关键)
在项目根目录创建pyproject.toml文件,通过project.scripts字段把foo、bar、baz映射到各自脚本的主函数:
[project] name = "your-package-name" version = "0.1.0" authors = [ { name="Your Name", email="your@email.com" } ] description = "Your package description" [project.scripts] foo = "foo:main" bar = "bar:main" baz = "baz:main"
注:
foo:main表示foo.py文件中的main函数是命令入口,若你的入口函数叫其他名称(比如cli),直接改成foo:cli即可。
第四步:安装包验证效果
在项目根目录执行安装命令:
# 生产环境安装 pip install . # 开发模式安装(修改代码无需重新安装) pip install -e .
安装完成后,直接在终端执行foo -a --other-arg、bar等命令即可生效。
可选优化:把入口逻辑整合到包内
若不想保留单独的foo.py等文件,可将CLI逻辑放到core包的子模块中,比如core/cli/foo.py,然后修改pyproject.toml的脚本配置:
[project.scripts] foo = "core.cli.foo:main"
对应的项目结构调整为:
your_package/ ├── core/ │ ├── __init__.py │ ├── utilities.py │ ├── api_1.py │ ├── api_2.py │ ├── api_3.py │ └── cli/ │ ├── __init__.py │ ├── foo.py │ ├── bar.py │ └── baz.py └── pyproject.toml
内容的提问来源于stack exchange,提问作者cookiesRbad
相关产品推荐
相关产品推荐

