如何通过pyproject.toml实现Python脚本的pip可执行性?
如何配置Python项目的可执行脚本
下面提供两种可行的配置方式,覆盖你提到的旧版setup.cfg方案,以及你未找到的pyproject.toml现代配置方法:
方法一:用setup.cfg配置
假设你的项目结构如下:
your_project/ ├── pyproject.toml ├── setup.cfg └── src/ └── example_package_YOUR_USERNAME_HERE/ ├── __init__.py ├── example.py └── myscript.py
- 确保模块可正常导入
在example.py中定义你的函数:
def add_one(number): return number + 1
在__init__.py里导出函数,简化后续导入路径:
from .example import add_one
- 修改setup.cfg添加入口点
打开setup.cfg,补充以下配置内容:
[metadata] name = example_package_YOUR_USERNAME_HERE version = 0.0.1 [options] packages = find: package_dir = = src python_requires = >=3.6 [options.entry_points] console_scripts = myscript = example_package_YOUR_USERNAME_HERE.myscript:main
- 调整脚本为可调用形式
修改myscript.py,把执行逻辑封装到main函数中:
from example_package_YOUR_USERNAME_HERE import add_one def main(): print(add_one(2)) # 增加输出方便验证结果 if __name__ == "__main__": main()
- 安装项目并测试
在终端执行命令安装开发版本:
pip install -e .
之后直接输入myscript,就能看到输出结果3。
方法二:用pyproject.toml配置(无需setup.cfg)
现在pyproject.toml已经支持直接配置可执行脚本,无需依赖旧的setup.cfg。
在你的pyproject.toml中添加以下配置:
[project] name = "example_package_YOUR_USERNAME_HERE" version = "0.0.1" packages = ["example_package_YOUR_USERNAME_HERE"] package-dir = {"" = "src"} requires-python = ">=3.6" [project.scripts] myscript = "example_package_YOUR_USERNAME_HERE.myscript:main"
同样需要把myscript.py改成带main函数的形式,然后执行pip install -e .,之后就能通过myscript命令直接运行脚本。
关键注意点
- 两种方式都要求指定一个可调用的入口函数(比如
main),入口点的格式必须是包名.模块名:函数名。 - 使用
pip install -e .安装的是开发模式,修改代码后无需重新安装即可测试。
内容的提问来源于stack exchange,提问作者somenxavier
相关产品推荐
相关产品推荐

