Files
tzst/README.pt.md
T
2025-06-08 11:31:48 +08:00

16 KiB
Raw Blame History

🇺🇸 English | 🇨🇳 汉语 | 🇪🇸 español | 🇯🇵 日本語 | 🇦🇪 العربية | 🇷🇺 русский | 🇩🇪 Deutsch | 🇫🇷 français | 🇰🇷 한국어 | 🇧🇷 português

tzst

codecov CodeQL CI/CD PyPI - Version PyPI - Downloads GitHub License Sponsor

tzst é uma biblioteca Python de próxima geração projetada para gerenciamento moderno de arquivos, aproveitando a compressão Zstandard de ponta para oferecer desempenho, segurança e confiabilidade superiores. Construída exclusivamente para Python 3.12+, esta solução corporativa combina operações atômicas, eficiência de streaming e uma API meticulosamente elaborada para redefinir como os desenvolvedores lidam com arquivos .tzst/.tar.zst em ambientes de produção. 🚀

✨ Recursos

  • 🗜️ Alta Compressão: Compressão Zstandard para excelentes taxas de compressão e velocidade
  • 📁 Compatibilidade com Tar: Cria arquivos tar padrão comprimidos com Zstandard
  • 💻 Interface de Linha de Comando: CLI intuitiva com suporte a streaming e opções abrangentes
  • 🐍 API Python: API limpa e pythônica para uso programático
  • 🌍 Multiplataforma: Funciona no Windows, macOS e Linux
  • 📂 Múltiplas Extensões: Suporta tanto extensões .tzst quanto .tar.zst
  • 💾 Eficiente em Memória: Modo streaming para lidar com grandes arquivos com uso mínimo de memória
  • ⚡ Operações Atômicas: Operações de arquivo seguras com limpeza automática em caso de interrupção
  • 🔒 Seguro por Padrão: Usa o filtro 'data' para máxima segurança durante a extração
  • 🚨 Tratamento de Erros Aprimorado: Mensagens de erro claras com alternativas úteis

📥 Instalação

Dos Releases do GitHub

Baixe executáveis independentes que não requerem instalação do Python:

Plataformas Suportadas

Plataforma Arquitetura Arquivo
🐧 Linux x86_64 tzst-v{versão}-linux-x86_64.zip
🐧 Linux ARM64 tzst-v{versão}-linux-aarch64.zip
🪟 Windows x64 tzst-v{versão}-windows-amd64.zip
🪟 Windows ARM64 tzst-v{versão}-windows-arm64.zip
🍎 macOS Intel tzst-v{versão}-macos-x86_64.zip
🍎 macOS Apple Silicon tzst-v{versão}-macos-arm64.zip

🛠️ Passos de Instalação

  1. 📥 Baixe o arquivo apropriado para sua plataforma da página de releases mais recentes
  2. 📦 Extraia o arquivo para obter o executável tzst (ou tzst.exe no Windows)
  3. 📂 Mova o executável para um diretório em seu PATH:
    • 🐧 Linux/macOS: sudo mv tzst /usr/local/bin/
    • 🪟 Windows: Adicione o diretório contendo tzst.exe à sua variável de ambiente PATH
  4. ✅ Verifique a instalação: tzst --help

🎯 Benefícios da Instalação Binária

  • ✅ Python não é necessário - Executável independente
  • ✅ Inicialização mais rápida - Sem overhead do interpretador Python
  • ✅ Implantação fácil - Distribuição de arquivo único
  • ✅ Comportamento consistente - Dependências incluídas

📦 Do PyPI

pip install tzst

🔧 Do Código Fonte

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install .

🚀 Instalação para Desenvolvimento

Este projeto usa padrões modernos de empacotamento Python:

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]

🚀 Início Rápido

💻 Uso da Linha de Comando

Nota: Baixe o binário independente para melhor desempenho e sem dependência do Python. Alternativamente, use uvx tzst para executar sem instalação. Veja a documentação do uv para detalhes.

# 📁 Criar um arquivo
tzst a archive.tzst file1.txt file2.txt directory/

# 📤 Extrair um arquivo
tzst x archive.tzst

# 📋 Listar conteúdo do arquivo
tzst l archive.tzst

# 🧪 Testar integridade do arquivo
tzst t archive.tzst

🐍 Uso da API Python

from tzst import create_archive, extract_archive, list_archive

# Criar um arquivo
create_archive("archive.tzst", ["file1.txt", "file2.txt", "directory/"])

# Extrair um arquivo
extract_archive("archive.tzst", "output_directory/")

# Listar conteúdo do arquivo
contents = list_archive("archive.tzst", verbose=True)
for item in contents:
    print(f"{item['name']}: {item['size']} bytes")

💻 Interface de Linha de Comando

📁 Operações de Arquivo

➕ Criar Arquivo

# Uso básico
tzst a archive.tzst file1.txt file2.txt

# Com nível de compressão (1-22, padrão: 3)
tzst a archive.tzst files/ -l 15

# Comandos alternativos
tzst add archive.tzst files/
tzst create archive.tzst files/

📤 Extrair Arquivo

# Extrair com estrutura completa de diretórios
tzst x archive.tzst

# Extrair para diretório específico
tzst x archive.tzst -o output/

# Extrair arquivos específicos
tzst x archive.tzst file1.txt dir/file2.txt

# Extrair sem estrutura de diretórios (plano)
tzst e archive.tzst -o output/

# Usar modo streaming para grandes arquivos
tzst x archive.tzst --streaming -o output/

📋 Listar Conteúdo

# Listagem simples
tzst l archive.tzst

# Listagem detalhada com informações
tzst l archive.tzst -v

# Usar modo streaming para grandes arquivos
tzst l archive.tzst --streaming -v

🧪 Testar Integridade

# Testar integridade do arquivo
tzst t archive.tzst

# Testar com modo streaming
tzst t archive.tzst --streaming

📊 Referência de Comandos

Comando Aliases Descrição Suporte a Streaming
a add, create Criar ou adicionar ao arquivo N/A
x extract Extrair com caminhos completos ✓ --streaming
e extract-flat Extrair sem estrutura de diretórios ✓ --streaming
l list Listar conteúdo do arquivo ✓ --streaming
t test Testar integridade do arquivo ✓ --streaming

⚙️ Opções da CLI

  • -v, --verbose: Ativar saída detalhada
  • -o, --output DIR: Especificar diretório de saída (comandos de extração)
  • -l, --level LEVEL: Definir nível de compressão 1-22 (comando de criação)
  • --streaming: Ativar modo streaming para processamento eficiente em memória
  • --filter FILTER: Filtro de segurança para extração (data/tar/fully_trusted)
  • --no-atomic: Desativar operações de arquivo atômicas (não recomendado)

🔒 Filtros de Segurança

# Extrair com máxima segurança (padrão)
tzst x archive.tzst --filter data

# Extrair com compatibilidade tar padrão
tzst x archive.tzst --filter tar

# Extrair com confiança total (perigoso - apenas para arquivos confiáveis)
tzst x archive.tzst --filter fully_trusted

🔐 Opções de Filtro de Segurança:

  • data (padrão): Mais seguro. Bloqueia arquivos perigosos, caminhos absolutos e caminhos fora do diretório de extração
  • tar: Compatibilidade tar padrão. Bloqueia caminhos absolutos e travessia de diretórios
  • fully_trusted: Sem restrições de segurança. Use apenas com arquivos completamente confiáveis

🐍 API Python

📦 Classe TzstArchive

from tzst import TzstArchive

# Criar um novo arquivo
with TzstArchive("archive.tzst", "w", compression_level=5) as archive:
    archive.add("file.txt")
    archive.add("directory/", recursive=True)

# Ler um arquivo existente
with TzstArchive("archive.tzst", "r") as archive:
    # Listar conteúdo
    contents = archive.list(verbose=True)
    
    # Extrair com filtro de segurança
    archive.extract("file.txt", "output/", filter="data")
    
    # Testar integridade
    is_valid = archive.test()

# Para grandes arquivos, usar modo streaming
with TzstArchive("large_archive.tzst", "r", streaming=True) as archive:
    archive.extract(path="output/")

⚠️ Limitações Importantes:

  • ❌ Modo de anexação não suportado: Crie múltiplos arquivos ou recrie o arquivo inteiro em vez disso

🎯 Funções de Conveniência

📁 create_archive()

from tzst import create_archive

# Criar com operações atômicas (padrão)
create_archive(
    archive_path="backup.tzst",
    files=["documents/", "photos/", "config.txt"],
    compression_level=10
)

📤 extract_archive()

from tzst import extract_archive

# Extrair com segurança (padrão: filtro 'data')
extract_archive("backup.tzst", "restore/")

# Extrair arquivos específicos
extract_archive("backup.tzst", "restore/", members=["config.txt"])

# Achatar estrutura de diretórios
extract_archive("backup.tzst", "restore/", flatten=True)

# Usar streaming para grandes arquivos
extract_archive("large_backup.tzst", "restore/", streaming=True)

📋 list_archive()

from tzst import list_archive

# Listagem simples
files = list_archive("backup.tzst")

# Listagem detalhada
files = list_archive("backup.tzst", verbose=True)

# Streaming para grandes arquivos
files = list_archive("large_backup.tzst", streaming=True)

🧪 test_archive()

from tzst import test_archive

# Teste básico de integridade
if test_archive("backup.tzst"):
    print("Arquivo é válido")

# Testar com streaming
if test_archive("large_backup.tzst", streaming=True):
    print("Grande arquivo é válido")

🔧 Recursos Avançados

📂 Extensões de Arquivo

A biblioteca automaticamente lida com extensões de arquivo com normalização inteligente:

  • .tzst - Extensão primária para arquivos tar+zstandard
  • .tar.zst - Extensão padrão alternativa
  • Detecção automática ao abrir arquivos existentes
  • Adição automática de extensão ao criar arquivos
# Todos estes criam arquivos válidos
create_archive("backup.tzst", files)      # Cria backup.tzst
create_archive("backup.tar.zst", files)  # Cria backup.tar.zst  
create_archive("backup", files)          # Cria backup.tzst
create_archive("backup.txt", files)      # Cria backup.tzst (normalizado)

🗜️ Níveis de Compressão

Os níveis de compressão Zstandard variam de 1 (mais rápido) a 22 (melhor compressão):

  • Nível 1-3: Compressão rápida, arquivos maiores
  • Nível 3 (padrão): Bom equilíbrio entre velocidade e compressão
  • Nível 10-15: Melhor compressão, mais lento
  • Nível 20-22: Compressão máxima, muito mais lento

🌊 Modo Streaming

Use o modo streaming para processamento eficiente em memória de grandes arquivos:

✅ Benefícios:

  • Uso de memória significativamente reduzido
  • Melhor desempenho para arquivos que não cabem na memória
  • Limpeza automática de recursos

🎯 Quando usar:

  • Arquivos maiores que 100MB
  • Ambientes com memória limitada
  • Processamento de arquivos com muitos arquivos grandes
# Exemplo: Processando um grande arquivo de backup
from tzst import extract_archive, list_archive, test_archive

large_archive = "backup_500gb.tzst"

# Operações eficientes em memória
is_valid = test_archive(large_archive, streaming=True)
contents = list_archive(large_archive, streaming=True, verbose=True)
extract_archive(large_archive, "restore/", streaming=True)

⚡ Operações Atômicas

Todas as operações de criação de arquivo usam operações de arquivo atômicas por padrão:

  • Arquivos criados em arquivos temporários primeiro, depois movidos atomicamente
  • Limpeza automática se o processo for interrompido
  • Nenhum risco de arquivos corrompidos ou incompletos
  • Compatibilidade multiplataforma
# Operações atômicas habilitadas por padrão
create_archive("important.tzst", files)  # Seguro contra interrupção

# Pode ser desabilitado se necessário (não recomendado)
create_archive("test.tzst", files, use_temp_file=False)

🚨 Tratamento de Erros

from tzst import TzstArchive
from tzst.exceptions import (
    TzstError,
    TzstArchiveError,
    TzstCompressionError,
    TzstDecompressionError,
    TzstFileNotFoundError
)

try:
    with TzstArchive("archive.tzst", "r") as archive:
        archive.extract()
except TzstDecompressionError:
    print("Falha ao descomprimir arquivo")
except TzstFileNotFoundError:
    print("Arquivo de arquivo não encontrado")
except KeyboardInterrupt:
    print("Operação interrompida pelo usuário")
    # Limpeza é tratada automaticamente

🚀 Desempenho e Comparação

💡 Dicas de Desempenho

  1. 🗜️ Níveis de compressão: Nível 3 é ótimo para a maioria dos casos de uso
  2. 🌊 Streaming: Use para arquivos maiores que 100MB
  3. 📦 Operações em lote: Adicione múltiplos arquivos em uma única sessão
  4. 📄 Tipos de arquivo: Arquivos já comprimidos não comprimirão muito mais

🆚 vs Outras Ferramentas

vs tar + gzip:

  • ✅ Melhores taxas de compressão
  • ⚡ Descompressão mais rápida
  • 🔄 Algoritmo moderno

vs tar + xz:

  • 🚀 Compressão significativamente mais rápida
  • 📊 Taxas de compressão similares
  • ⚖️ Melhor compromisso velocidade/compressão

vs zip:

  • 🗜️ Melhor compressão
  • 🔐 Preserva permissões Unix e metadados
  • 🌊 Melhor suporte a streaming

📋 Requisitos

  • 🐍 Python 3.12 ou superior
  • 📦 zstandard >= 0.19.0

🛠️ Desenvolvimento

🚀 Configurando Ambiente de Desenvolvimento

Este projeto usa padrões modernos de empacotamento Python:

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]

🧪 Executando Testes

# Executar testes com cobertura
pytest --cov=tzst --cov-report=html

# Ou usar o comando mais simples (configurações de cobertura estão em pyproject.toml)
pytest

✨ Qualidade do Código

# Verificar qualidade do código
ruff check src tests

# Formatar código
ruff format src tests

🤝 Contribuindo

Nós recebemos contribuições! Por favor, leia nosso Guia de Contribuição para:

  • Configuração de desenvolvimento e estrutura do projeto
  • Diretrizes de estilo de código e melhores práticas
  • Requisitos de teste e escrita de testes
  • Processo de pull request e fluxo de revisão

🚀 Início Rápido para Colaboradores

git clone https://github.com/xixu-me/tzst.git
cd tzst
pip install -e .[dev]
python -m pytest tests/

🎯 Tipos de Contribuições Bem-vindas

  • 🐛 Correções de bugs - Corrigir problemas na funcionalidade existente
  • ✨ Recursos - Adicionar novas capacidades à biblioteca
  • 📚 Documentação - Melhorar ou adicionar documentação
  • 🧪 Testes - Adicionar ou melhorar cobertura de testes
  • ⚡ Desempenho - Otimizar código existente
  • 🔒 Segurança - Abordar vulnerabilidades de segurança

🙏 Agradecimentos

📄 Licença

Direitos autorais © 2025 Xi Xu. Todos os direitos reservados.

Licenciado sob a licença BSD 3-Clause.