Ctrl K
ComunidadGuías…

mcp-ollama-python.spec

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# -*- mode: python ; coding: utf-8 -*-
# from terminal/cli, run: poetry shell & pyinstaller mcp-ollama-python.spec --clean --distpath bin
# or from poetry, run: poetry run pyinstaller mcp-ollama-python.spec --clean --distpath bin

import os
import platform
import re
import struct
from pathlib import Path

# ---------------------------------------------------------------------------
# Read version from pyproject.toml
# ---------------------------------------------------------------------------
_pyproject = Path(SPECPATH) / "pyproject.toml"
try:
    import tomllib
    _version_str = tomllib.loads(_pyproject.read_text(encoding="utf-8"))["tool"]["poetry"]["version"]
except Exception:
    _m = re.search(r'^version\s*=\s*["\']([^"\']+)["\']', _pyproject.read_text(encoding="utf-8"), re.MULTILINE)
    _version_str = _m.group(1) if _m else "0.0.0"

_ver_parts = [int(x) for x in _version_str.split(".")]
while len(_ver_parts) < 4:
    _ver_parts.append(0)
_ver_tuple = tuple(_ver_parts[:4])

from PyInstaller.utils.win32.versioninfo import (
    FixedFileInfo,
    StringFileInfo,
    StringStruct,
    StringTable,
    VarFileInfo,
    VarStruct,
    VSVersionInfo,
)

_version_info = VSVersionInfo(
    ffi=FixedFileInfo(
        filevers=_ver_tuple,
        prodvers=_ver_tuple,
        mask=0x3F,
        flags=0x0,
        OS=0x40004,
        fileType=0x1,
        subtype=0x0,
        date=(0, 0),
    ),
    kids=[
        StringFileInfo(
            [
                StringTable(
                    "040904B0",
                    [
                        StringStruct("CompanyName", "Pedja Blagojevic"),
                        StringStruct("FileDescription", "MCP Ollama Python Server"),
                        StringStruct("FileVersion", _version_str),
                        StringStruct("InternalName", "mcp-ollama-python"),
                        StringStruct("OriginalFilename", "mcp-ollama-python.exe"),
                        StringStruct("ProductName", "MCP Ollama Python"),
                        StringStruct("ProductVersion", _version_str),
                    ],
                )
            ]
        ),
        VarFileInfo([VarStruct("Translation", [1033, 1200])]),
    ],
)

# ---------------------------------------------------------------------------
# Detect OS and architecture for the EXE filename
# ---------------------------------------------------------------------------
_arch = "x64" if struct.calcsize("P") * 8 == 64 else "x86"

_os_tag = os.environ.get("MCP_OS_TAG", "")
if not _os_tag:
    if platform.system() == "Windows":
        _win_ver = platform.version()  # e.g. "10.0.22631"
        _build = int(_win_ver.split(".")[-1]) if _win_ver else 0
        if _build >= 22000:
            _os_tag = "win11"
        else:
            _os_tag = "win10"
    elif platform.system() == "Darwin":
        _os_tag = f"macos{platform.mac_ver()[0]}"
    else:
        _os_tag = "linux"

_exe_name = f"mcp-ollama-python-{_version_str}-{_os_tag}-{_arch}"

block_cipher = None

a = Analysis(
    ['src/mcp_ollama_python/main.py'],
    pathex=['src'],
    binaries=[],
    datas=[],
    hiddenimports=[
        # Standard library
        'asyncio',
        'signal',
        'sys',
        'typing',
        # Timezone data
        'tzdata',
        # MCP dependencies
        'mcp',
        'mcp.server',
        'mcp.server.stdio',
        'mcp.types',
        'mcp.shared',
        'mcp.shared.memory',
        # HTTP client
        'httpx',
        'httpx._transports',
        'httpx._transports.default',
        # Pydantic
        'pydantic',
        'pydantic.fields',
        'pydantic_core',
        # Rich console
        'rich',
        'rich.console',
        'rich.logging',
        # System utilities
        'psutil',
        # JSON handling
        'json',
        'jsonschema',
        # Internal modules
        'mcp_ollama_python',
        'mcp_ollama_python.server',
        'mcp_ollama_python.ollama_client',
        'mcp_ollama_python.models',
        'mcp_ollama_python.response_formatter',
        'mcp_ollama_python.autoloader',
        'mcp_ollama_python.tools',
        'mcp_ollama_python.tools.chat',
        'mcp_ollama_python.tools.delete',
        'mcp_ollama_python.tools.embed',
        'mcp_ollama_python.tools.generate',
        'mcp_ollama_python.tools.list',
        'mcp_ollama_python.tools.ps',
        'mcp_ollama_python.tools.pull',
        'mcp_ollama_python.tools.show',
        # Async support
        'anyio',
        'anyio._backends',
        'anyio._backends._asyncio',
        'sniffio',
        # SSL/HTTP support
        'certifi',
        'httpcore',
        'h11',
        'idna',
    ],
    hookspath=[],
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name=_exe_name,
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=None,
    version=_version_info,
)