如何确保setup.py
编译项目PO文件并在创建sdist
时包含它们。这是一个Django应用程序和手工工艺生成MO文件是在应用程序的根目录中运行以下命令:如何编译Django应用程序的setup.py中的gettext转换
django-admin compilemessages
(这意味着我们要一个级别比setup.py深)
我想避免每次手动编译MO文件。我不想将它们存储在存储库中。
如何确保setup.py
编译项目PO文件并在创建sdist
时包含它们。这是一个Django应用程序和手工工艺生成MO文件是在应用程序的根目录中运行以下命令:如何编译Django应用程序的setup.py中的gettext转换
django-admin compilemessages
(这意味着我们要一个级别比setup.py深)
我想避免每次手动编译MO文件。我不想将它们存储在存储库中。
from django.core.management.commands.compilemessages import compile_messages
,你在setup
方法运行之前setup
然后包括创建的文件用它在你的setup.py
脚本。
我简单的解决方案(得到了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文件,当您建立卵子或安装包。
看起来很酷。我稍后再试一试。谢谢。 – muhuk 2013-03-21 05:10:30
这很好,但是当django没有安装时调用'python setup.py install'失败(安装程序试图在安装django之前运行安装命令) – 2014-04-06 13:28:17
我添加了setup_requires = ['django']来解决这个问题,使用这个技巧在https://bitbucket.org/slav0nic/djangobb/src/de8e836662e8c5e3a294717c24238b20f3cced47/setup.py?at=default – slav0nic 2014-04-07 08:56:57
问题是关于自动执行这个任务 – 2014-04-06 13:09:11
安装脚本是一个普通的'python'脚本,所以你可以使用里面的'Django'代码。考虑一下'setup.py'一个正常的程序,其目标是安装你的软件包,并且必须遵循各种步骤。其中一个是从'Django'调用'compile_messages'。这将使安装包自动化的任务 - 在运行'setup.py'之前,您不需要调用'django-admin compilemessages'。 – gruszczy 2014-04-06 15:38:35