2010-03-12 40 views
6

如何確保setup.py編譯項目PO文件並在創建sdist時包含它們。這是一個Django應用程序和手工工藝生成MO文件是在應用程序的根目錄中運行以下命令:如何編譯Django應用程序的setup.py中的gettext轉換

django-admin compilemessages 

(這意味着我們要一個級別比setup.py深)

我想避免每次手動編譯MO文件。我不想將它們存儲在存儲庫中。

回答

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

,你在setup方法運行之前setup然後包括創建的文件用它在你的setup.py腳本。

+1

問題是關於自動執行這個任務 – 2014-04-06 13:09:11

+0

安裝腳本是一個普通的'python'腳本,所以你可以使用裏面的'Django'代碼。考慮一下'setup.py'一個正常的程序,其目標是安裝你的軟件包,並且必須遵循各種步驟。其中一個是從'Django'調用'compile_messages'。這將使安裝包自動化的任務 - 在運行'setup.py'之前,您不需要調用'django-admin compilemessages'。 – gruszczy 2014-04-06 15:38:35

5

我簡單的解決方案(得到了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} 
) 

這將幫助你編譯PO文件,當您建立卵子或安裝包。

+0

看起來很酷。我稍後再試一試。謝謝。 – muhuk 2013-03-21 05:10:30

+0

這很好,但是當django沒有安裝時調用'python setup.py install'失敗(安裝程序試圖在安裝django之前運行安裝命令) – 2014-04-06 13:28:17

+0

我添加了setup_requires = ['django']來解決這個問題,使用這個技巧在https://bitbucket.org/slav0nic/djangobb/src/de8e836662e8c5e3a294717c24238b20f3cced47/setup.py?at=default – slav0nic 2014-04-07 08:56:57

相關問題