gpt4 book ai didi

python - 调用 setup.py install 时编译翻译文件

转载 作者:太空狗 更新时间:2023-10-30 00:01:47 24 4
gpt4 key购买 nike

我正在使用 Babel 开发 Flask 应用程序。感谢Distutils/Setuptools Integration , compile/extract/... 函数的所有参数都存储在 setup.cfg 中,编译 i18n 文件就像

./setup.py compile_catalog

太棒了。现在我希望在运行时自动完成此操作

./setup.py install

make 的话来说,就是让 install 目标依赖于 compile_catalog 目标。

上下文

我们在代码存储库中仅存储翻译 (.po) 文件。 .gitignore从跟踪中排除 .mo.pot 文件。

当开发人员拉取代码的新修订时,他运行

pip install -r requirements.txt

更新依赖项并在开发模式下安装项目。然后,使用上面的命令行,他编译了翻译二进制 (.mo) 文件。

是否有一种简单且推荐的方法来修改 setup.py 以一步完成这两个操作?还是我想滥用 setuptools

使用像这样的脚本可以用于开发目的:

#!/bin/sh
./setup.py compile_catalog
pip install -r requirements.txt

但我想要一个解决方案,当使用通常的 setup.py 安装说明安装包时,它也能工作,就像从 PyPi 安装一样。

我是否应该理解 setuptools 不应该像这样使用,分发软件的人在创建他们的文件时手动或使用自定义脚本编译他们的翻译文件,而不是依赖 setup.py 在安装时编译它们?

我在 Internet 上没有找到很多解决此问题的帖子。我发现的那些涉及从 setup.py 中的函数运行 pybabel 命令行界面,这听起来很遗憾,因为它错过了 setuptools 集成的要点。

最佳答案

我认为您的需求是完全正确的,我很惊讶似乎没有关于如何实现这一点的官方指南。

我现在从事的项目也支持多种语言,这就是我所做的:

  • setup.cfg 中,创建适当的条目,以便 compile_catalog 可以在没有选项的情况下运行。

  • setup.py 中,从 setuptools 子类化安装命令:

设置.py:

from setuptools import setup
from setuptools.command.install import install

class InstallWithCompile(install):
def run(self):
from babel.messages.frontend import compile_catalog
compiler = compile_catalog(self.distribution)
option_dict = self.distribution.get_option_dict('compile_catalog')
compiler.domain = [option_dict['domain'][1]]
compiler.directory = option_dict['directory'][1]
compiler.run()
super().run()

然后,在调用 setup() 时,使用名称“install”注册我们的 InstallWithCompile 命令,并确保 *.mo 文件将包含在包中:

setup(
...
cmdclass={
'install': InstallWithCompile,
},
...
package_data={'': ['locale/*/*/*.mo', 'locale/*/*/*.po']},
)

由于在设置过程中使用了 babel,因此您应该将其添加为设置依赖项:

setup_requires=[
'babel',
],

请注意,setup_requiresinstall_requires 中出现的包(这里是 babel)将无法使用 python setup.py install 由于 issuesetuptools 中,但它与 pip install 配合使用时效果很好。

关于python - 调用 setup.py install 时编译翻译文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40051076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com