Light-weight Python wheels.
您可以通过以下命令安装 pywheels:
pip install pywheels- guarantee_file_exist
- get_tmp_file_path
- delete_file
- copy_file
- get_answer:方便调大语言模型 API 的一个 wrapper 函数
- execute_command
- execute_python_script
欢迎贡献您的代码或建议!请在 GitHub 提交问题或拉取请求。
-
使用标准库
gettext实现多语言支持。 -
项目在
pywheels/i18n.py中定义了三个接口:translate: 翻译函数,模块内可用from pywheels.i18n import translate导入(推荐使用相对路径);set_language(language): 手动切换语言;init_language(): 从系统环境变量自动初始化语言(已在模块加载时默认执行)。
-
示例用法:
# pywheels/miscellaneous/hello.py
from ..i18n import *
def print_helloworld(
)-> None:
print(translate("Hello, World!"))translate()默认会根据环境变量(如LANG,LC_ALL)自动选择语言。也可通过调用set_language('zh')来手动切换语言。
- 提取
pywheels中所有.py文件中的翻译字符串,为目标语言准备.po文件(如尚未存在)并明确编码方式为 UTF-8:
xgettext -L Python --keyword=translate -o pywheels/locales/messages.pot $(find . -name "*.py")
for lang in zh_CN en_US; do
mkdir -p pywheels/locales/$lang/LC_MESSAGES
[ -f pywheels/locales/$lang/LC_MESSAGES/messages.po ] || cp pywheels/locales/messages.pot pywheels/locales/$lang/LC_MESSAGES/messages.po
done
for lang in zh_CN en_US; do
sed -i 's/charset=CHARSET/charset=UTF-8/' pywheels/locales/$lang/LC_MESSAGES/messages.po
done💡 参数
--keyword=translate告诉xgettext将translate("...")作为翻译目标。
- 翻译
.po文件中的内容
使用文本编辑器(如 VS Code)、翻译软件(如 Poedit)或命令行工具编辑每个 .po 文件,填入对应语言的翻译:
msgid "Hello, %s!"
msgstr "你好,%s!"- 批量编译
.po为.mo文件:
for lang in zh_CN en_US; do
msgfmt pywheels/locales/$lang/LC_MESSAGES/messages.po -o pywheels/locales/$lang/LC_MESSAGES/messages.mo
done- 所有待翻译内容需用
translate("...")包裹,确保能被xgettext提取。 .po和.mo文件需为 UTF-8 编码。- 国际化模块仅初始化一次语言环境,其它模块通过导入
translate使用即可。 - 推荐使用 C 风格占位符(如
%s,%d),以便.po文件中的翻译更自然、格式更稳定:
translate("Hello, %s!") % (name)确保修改 setup.py 中的版本号后,在项目根目录下运行:
rm -rf build/ dist/ *.egg-info && python setup.py sdist bdist_wheel尚未注册账号可访问 PyPI 创建账户。
安装 Twine(如尚未安装):
pip install twine建议使用 API token 登录,更安全。推荐在 ~/.pypirc 中配置:
[pypi]
username = __token__
password = pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx首次上传时会提示输入用户名和密码,配置后可免交互。
执行上传命令:
twine upload dist/*Windows 系统下,可以:
twine upload --config-file "$env:APPDATA\pypi\pypi.ini" dist/*- 使用 API token 代替密码,安全且方便自动化。
- PyPI 不允许覆盖已发布的同版本文件,上传前务必更新版本号。
- PyPI 删除 release 时仅隐藏,不会物理删除版本号;已用版本号永久保留,无法重复上传。