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',
]
}
)