python项目setup.py规范与pip依赖精简

pip list --not-required --format freeze --exclude-editable | sort

setup.py

不是用pyproject.toml是因为不支持一些参数的动态化,比如版本号的自动更新。


from importlib.resources import files
from pathlib import Path

from setuptools import setup, find_packages

# 配置的基本说明 https://docs.python.org/zh-cn/3.11/distutils/setupscript.html

setup(
    name='hogwarts-agent-framework',
    # 版本号,可以通过判断当下的tag或者时间戳进行动态更新
    version='0.0.1',
    # 测试用例建议放到特定包下,这样方便迁移,也避免多子项目时候tests目录互相打架 tests/{ut,it}
    packages=find_packages(where='src', exclude='tests'),
    # 源代码通常放在这个地方,是为了将来可以容纳多个包。
    # 拆分项目的时候可以先分离多个包,然后再拆分到顶层目录中,最后用过subtree split或者filter-repo拆分
    package_dir={"": "src"},
    # 利用 pip list --not-required --format freeze --exclude-editable | sort 从外部提取
    install_requires=Path('requirements.txt').read_text().split('\n'),
    # 可选依赖,通常会分多分支,或者多个场景
    extras_require={
        'main': [
            'csr-utils@git+https://oauth2:5QPfzmYfGkLmPPxxx@gitlab.ceshiren.com/ceba/tech/common_tools/csr_utils.git@2.0.1.20241019',
        ],
        'dev': [
            'csr-utils@git+https://oauth2:5QPfzmYfGkLmPPxxx@gitlab.ceshiren.com/ceba/tech/common_tools/csr_utils.git@2.0.1.20241019',
        ],
    },

    # 命令行入口,服务到服务器的时候,可以直接执行命令不需要依赖源代码位置
    entry_points={
        'console_scripts': [
            # 命令行入口
            'hogwarts-agent-cli=hogwarts_agent.cli.__main__:main',
            # 服务器入口
            'hogwarts-agent-server=hogwarts_agent.site.__main__:main',
        ]
    }

)