init_project.py•6.33 kB
#!/usr/bin/env python3
"""
Скрипт инициализации проекта n8n MCP-сервера.
Project initialization script for n8n MCP server.
"""
import os
import subprocess
import sys
from pathlib import Path
def run_command(cmd: str, cwd: str = None) -> bool:
"""Выполнение команды в shell."""
try:
print(f"🔧 Выполнение: {cmd}")
result = subprocess.run(
cmd,
shell=True,
cwd=cwd,
capture_output=True,
text=True,
encoding='utf-8'
)
if result.stdout:
print(result.stdout)
if result.stderr:
print(f"⚠️ Предупреждение: {result.stderr}")
return result.returncode == 0
except Exception as e:
print(f"❌ Ошибка выполнения команды: {e}")
return False
def check_requirements():
"""Проверка системных требований."""
print("🔍 Проверка системных требований...")
# Проверка Python версии
python_version = sys.version_info
if python_version < (3, 9):
print(f"❌ Требуется Python 3.9+, установлен: {python_version.major}.{python_version.minor}")
return False
print(f"✅ Python {python_version.major}.{python_version.minor}.{python_version.micro}")
# Проверка git
if not run_command("git --version"):
print("❌ Git не установлен")
return False
print("✅ Все системные требования выполнены")
return True
def init_git_repository():
"""Инициализация git репозитория."""
print("\n🔧 Инициализация git репозитория...")
if not os.path.exists(".git"):
if not run_command("git init"):
return False
# Создание .gitignore
gitignore_content = """__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv/
.env
.env.local
.env.*.local
dist/
build/
*.egg-info/
.pytest_cache/
.coverage
htmlcov/
.tox/
.nox/
"""
with open(".gitignore", "w", encoding="utf-8") as f:
f.write(gitignore_content)
print("✅ Создан .gitignore")
else:
print("✅ Git репозиторий уже инициализирован")
return True
def setup_virtual_environment():
"""Настройка виртуального окружения."""
print("\n🔧 Настройка виртуального окружения...")
venv_name = "venv"
if not os.path.exists(venv_name):
if not run_command(f"python -m venv {venv_name}"):
return False
print(f"✅ Создано виртуальное окружение: {venv_name}")
else:
print(f"✅ Виртуальное окружение уже существует: {venv_name}")
print("✅ Установлены зависимости")
return True
def create_env_file():
"""Создание файла .env из примера."""
print("\n🔧 Настройка конфигурации...")
if not os.path.exists(".env"):
if os.path.exists(".env.example"):
with open(".env.example", "r", encoding="utf-8") as src:
with open(".env", "w", encoding="utf-8") as dst:
dst.write(src.read())
print("✅ Создан .env файл из .env.example")
print("⚠️ Отредактируйте .env файл с вашими настройками n8n")
else:
print("⚠️ .env.example не найден")
else:
print("✅ .env файл уже существует")
return True
def test_connection():
"""Тестирование подключения к n8n."""
print("\n🔧 Тестирование подключения к n8n...")
try:
from test_connection import main as test_main
exit_code = test_main()
return exit_code == 0
except ImportError as e:
print(f"⚠️ Не удалось импортировать тесты: {e}")
print("⚠️ Пропускаем тестирование подключения")
return True
def main():
"""Основная функция инициализации."""
print("🚀 Инициализация проекта n8n MCP-сервера")
print("=" * 60)
# Проверка требований
if not check_requirements():
print("❌ Инициализация прервана из-за ошибок")
return 1
# Инициализация git
if not init_git_repository():
print("❌ Ошибка инициализации git")
return 1
# Настройка виртуального окружения
if not setup_virtual_environment():
print("❌ Ошибка настройки виртуального окружения")
return 1
# Создание .env файла
if not create_env_file():
print("❌ Ошибка создания конфигурации")
return 1
# Тестирование подключения
if not test_connection():
print("⚠️ Тестирование подключения прошло с ошибками")
print("⚠️ Проверьте настройки n8n в .env файле")
print("\n" + "=" * 60)
print("🎉 Проект успешно инициализирован!")
print("\n📋 Следующие шаги:")
print("1. Отредактируйте .env файл с вашими настройками n8n")
print("2. Активируйте виртуальное окружение:")
print(" Windows: venv\\Scripts\\activate")
print(" Linux/Mac: source venv/bin/activate")
print("3. Запустите сервер:")
print(" python -m n8n_mcp_server.server stdio")
print("4. Или протестируйте:")
print(" python test_connection.py")
print("\n📖 Подробнее в README.md")
return 0
if __name__ == "__main__":
exit_code = main()
sys.exit(exit_code)