Глава 2. Два CLI-тула в одном пакете
В первой главе мы сделали команду hello
.
Теперь добавим ещё одну — bye
, и у нас будет два отдельных CLI в одном проекте.
1. Добавляем второй файл bye.py
# bye.py
import sys
def main():
name = sys.argv[1] if len(sys.argv) > 1 else "friend"
print(f"Bye, {name}!")
2. Обновляем pyproject.toml
В блоке [project.scripts]
можно перечислить сколько угодно команд.
А чтобы setuptools не психовал («Multiple top-level modules discovered…»), нужно явно сказать, какие .py
файлы — это наши модули.
[project]
name = "hello-tool"
version = "0.2.0"
requires-python = ">=3.10"
dependencies = []
[project.scripts]
hello = "hello:main"
bye = "bye:main"
[tool.uv]
package = true
[tool.setuptools]
py-modules = ["hello", "bye"]
3. Обновляем зависимости/синхронизацию
uv sync
Если уже ставил глобально — просто обнови:
uv tool upgrade hello-tool
4. Проверяем
Локально:
uv run hello Alice
uv run bye Bob
Глобально:
hello Alice
bye Bob
💡 Фишка: оба скрипта сидят в одном пакете, но при установке создаются отдельные команды. Это прям как в npm bin
, когда у тебя несколько CLI внутри одного пакета.