发布包时编译po文件
项目描述
介绍
本包编译po文件。它包含一个zest.releaser入口和一个独立的命令行工具。
目标
您想要发布一个包含locales目录(或locale,或其他名称,只要其中包含一个位于某处的LC_MESSAGES文件夹即可)的包,该目录中包含.po文件中的翻译。您还希望将编译后的.mo文件包含在发布中,但您不希望在版本控制系统中(如git)保留这些文件,因为它们是二进制文件,可以很容易地重新创建。这是很好的。这个包可以帮助您完成这项工作。
需要.mo文件?添加一个MANIFEST.in文件。
当您使用python setup.py sdist创建源分发时,Python不会自动包含所有文件。它可能会查看版本控制系统的信息(RCS),但这可能不起作用。这取决于您的RCS、Python版本、setuptools或额外的包,如setuptools-git。
由于编译后的.mo文件最好不在git(或任何其他RCS)中存储,因此您需要提供有关要包含哪些文件的提示。您可以通过添加一个MANIFEST.in文件来实现这一点。假设您的包大致包含以下内容(不是所有文件都显示)
your.package/setup.py your.package/your/package/locales/nl/LC_MESSAGES/domain.po
那么您需要一个像这样的MANIFEST.in文件
recursive-include your *
或者用更大的例子
recursive-include your * recursive-include docs * include * global-exclude *.pyc
我将逐行解释以澄清。是的:我现在如果想要有一个正确的MANIFEST.in文件的例子,就简单地去这个PyPI页面。所以现在这个文档比严格需要的稍微大一点。:-)
- recursive-include your *
这告诉distutils递归地包含your目录下的所有(*)文件和目录。试试看:创建一个如上例所示的结构,并带有合适的setup.py,将domain.po文件复制为domain.mo作为愚蠢的测试,运行python setup.py sdist并检查.mo文件是否最终出现在创建的分发中。
- recursive-include docs *
包含docs目录中的文件。如果此目录不存在,您将收到警告,因此您可能想要删除它,但将其保留在那里并无害。
- include *
包含根目录中未识别的文件。否则默认情况下,仅包括标准文件,如README.txt、setup.py和setup.cfg。因此,例如必须显式包含CHANGES.txt文件(此处使用*)。
- global-exclude *.pyc
这可以避免在发布中不必要地添加编译后的python文件。当这些文件不存在时,例如在新鲜检出后,您将收到无害的警告:no previously-included files matching '*.pyc' found anywhere in distribution。
有关创建源分发和如何使用MANIFEST.in的更多信息,请参阅Python distutils文档或setuptools文档。
当这部分工作正常时,zest.pocompile这个包唯一需要做的是实际上找到所有的.po文件并将它们编译成.mo文件。它简单地在名为LC_MESSAGES的目录中查找并编译所有找到的.po文件。
命令行工具
当你运行pip install zest.pocompile时,你会得到一个命令行工具pocompile。当你运行它时,它会遍历当前目录,在结构良好的本地目录中找到所有的po翻译文件,并将它们编译成.mo文件。你也可以给它一个目录列表作为参数。通过运行带有--help选项的命令来获取一些帮助。
在上面的例子中,如果你在your.package目录下运行pocompile,它将创建这个文件
your.package/your/package/locales/nl/LC_MESSAGES/domain.mo
zest.releaser入口点
你不需要zest.releaser来使zest.pocompile正常工作。但如果你同时使用这两个工具,并结合一个适当的MANIFEST.in文件,发布带有编译好的.mo文件的资源分发就变得容易了。
zest.releaser的release(或fullrelease)命令会创建一个(git或其他)标签并将代码签出到这个标签。然后它创建一个源分发(sdist)和可能的wheel(bdist_wheel),并将其上传到PyPI。当zest.pocompile加入到这个过程中时,它会在签出标签后立即编译.po文件。这对创建包含.mo文件的分发正好合适。
你可能希望在zest.pocompile不可用的情况下,在发布过程中尽早失败。从版本1.6.0开始,你可以通过编辑你想要此功能的包的setup.cfg文件来实现,并添加以下部分
[zest.releaser] prereleaser.before = zest.pocompile.available
致谢
这个包是由Maurits van Rees组装的。
它依赖于python-gettext包。这本身建议使用Babel包。但它正好做了我们需要的,而且其发布版存储在PyPI上,所以我们忽略了那个建议。
主要功能是从collective.releaser的build_mo命令中取出的。
谢谢!
待办事项
添加测试。
变更日志
2.0.0 (2023-09-11)
发布最终版本。自上次alpha版以来没有变化。[maurits]
2.0.0a1 (2023-07-13)
需要Python 3.8+并切换到原生命名空间包。这是必要的,因为zest.releaser 9.0.0a1也做了同样的事情。[maurits]
1.6.0 (2022-09-13)
添加zest.pocompile.available。你可以在zest.pocompile不可用的情况下让包的完整发布提前失败。编辑其setup.cfg,并添加一个带有值prereleaser.before = zest.pocompile.available的[zest.releaser]部分。[maurits]
1.5.0 (2020-01-29)
声明Python 2和3的兼容性。看起来工作得很好。[maurits]
1.4 (2013-07-05)
迁移到https://github.com/zestsoftware/zest.pocompile。[maurits]
1.3 (2011-12-16)
修复了示例MANIFEST.in。[maurits]
1.2 (2011-12-16)
在readme中添加了一个更大的MANIFEST.in文件示例。还在zest.pocompile本身中添加了一个MANIFEST.in,以便将CHANGES.txt包含在源分发中。[maurits]
1.1 (2011-12-15)
在任意 LC_MESSAGES 目录中查找 .po 文件。如果它位于 locales 或 locale 目录内的某个语言目录中,也不再重要,因为它们也可能有 plonelocales 或 locales_for_version_2_only 等名称。请注意,在 Plone 中,.po 文件也可以位于 i18n 目录中,但那些不应被编译;它没有 LC_MESSAGES 目录,所以我们自动跳过它。[maurits]
1.0 (2010-10-19)
首次发布
项目详情
zest.pocompile-2.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4a531e1dc14e9fc04a8c349ad29b719c83449ba39f666137520de7737e2321b1 |
|
MD5 | bca43bf9675ff95e76a355dc94d82b16 |
|
BLAKE2b-256 | 5c18f14477e104dcab1795f6c6d594c9b87a47cdeb7d9700928764baaf4b64d6 |
zest.pocompile-2.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e315cbbe2880fe96953306319da048b4ee349de3cf05a34064abf140f26d4b79 |
|
MD5 | 15fdc3b2a9e9a96e1e0ce6ed86a18c80 |
|
BLAKE2b-256 | b3c585e1c4ec19bcfc0cf7196dc9e9008ef3687739c4062e38cdcd8c84e82698 |