2010-03-12 10 views
6

Wie kann ich sicherstellen, setup.py kompiliert Projekte PO-Dateien und enthalten sie immer wenn eine erstellt wird. Dies ist eine Django-Applikation und manuellen Prozess zu MO-Dateien zu erzeugen, ist folgenden Befehl in der App-Root-Verzeichnis auszuführen:Wie man gettext-Übersetzungen in setup.py einer Django-App kompiliert

django-admin compilemessages 

(Das bedeutet, eine Ebene tiefer als setup.py gehen) Ich möchte Vermeiden Sie es, MO-Dateien immer manuell zu kompilieren. Und ich möchte sie nicht im Repository speichern.

Antwort

3
from django.core.management.commands.compilemessages import compile_messages 

und verwenden Sie es in Ihrem setup.py Skript, bevor Sie setup laufen und schließen dann erstellten Dateien in setup Methode.

+1

Die Frage ist über die Automatisierung dieser Aufgabe –

+0

Setup-Skript ist ein normales 'Python'-Skript, so dass Sie Code aus' Django' darin verwenden können. Betrachten Sie "setup.py" als normales Programm, dessen Ziel es ist, Ihr Paket zu installieren und verschiedene Schritte zu befolgen. Einer von ihnen ruft 'compile_messages' aus' Django' auf. Dadurch wird die Installation des Pakets automatisiert - Sie müssen "django-admin compilemessages" nicht aufrufen, bevor Sie 'setup.py' ausführen. – gruszczy

5

Meine einfache Lösung (bekam eine Vorstellung von Trac):

#!/usr/bin/env python 
from setuptools import setup, find_packages 
from setuptools.command.install_lib import install_lib as _install_lib 
from distutils.command.build import build as _build 
from distutils.cmd import Command 


class compile_translations(Command): 
    description = 'compile message catalogs to MO files via django compilemessages' 
    user_options = [] 

    def initialize_options(self): 
     pass 

    def finalize_options(self): 
     pass 

    def run(self): 
     import os 
     import sys 
     from django.core.management.commands.compilemessages import \ 
      compile_messages 
     curdir = os.getcwd() 
     os.chdir(os.path.realpath('app_name')) 
     compile_messages(stderr=sys.stderr) 
     os.chdir(curdir) 


class build(_build): 
    sub_commands = [('compile_translations', None)] + _build.sub_commands 


class install_lib(_install_lib): 
    def run(self): 
     self.run_command('compile_translations') 
     _install_lib.run(self) 

setup(name='app', 
    packages=find_packages(), 
    include_package_data=True, 
    setup_requires=['django'], 
    ... 
    cmdclass={'build': build, 'install_lib': install_lib, 
     'compile_translations': compile_translations} 
) 

Dies wird Ihnen helfen po-Dateien zusammenstellen, wenn Sie Ei bauen oder Paket installieren.

+0

Sieht cool aus. Ich werde es später versuchen. Vielen Dank. – muhuk

+0

Das ist nett, scheitert aber beim Aufruf von 'python setup.py install', während django nicht installiert ist (Das Installationsprogramm versucht, den Installationsbefehl auszuführen, bevor django installiert wird) –

+0

ich habe setup_requires = ['django'] hinzugefügt, um diesen Fehler zu beheben in https://bitbucket.org/slav0nic/djangobb/src/de8e836662e8c5e3a294717c24238b20f3cced47/setup.py?at=default – slav0nic

Verwandte Themen