表情符号在带有 Pillow 的 Heroku 上渲染效果不佳,但在本地渲染效果很好
Emojis do not render well on Heroku with Pillow but they do locally
我在 Django 1.10 应用程序中使用 Pillow 4.2 在图像上插入一些包含 unicode 表情符号的文本。出于向后兼容的原因,整个 运行 都在 Python 2.7 上。
在本地它就像一个魅力。顺便说一句,我使用 OpenSansEmojis.tff
作为字体。
当我在 Heroku 上推送我的代码时,表情符号字符显示不正确,我得到的是 "square" 字符 (▯)。也就是说,'é'、'è'、'ç' 等重音字符都可以正确显示。
我应该补充一点,这个函数是 运行 由 Celery 4.* worker(Heroku 上的单独 dyno)实现的。
我已经试过了
我尝试设置 PYTHONIOENCODING
但没用。
我尝试使用 the trick mentioned here 但它也没有帮助。
好的,所以有点难以理解,但我认为 Heroku 运行宁 Python 的 narrow build 而我 运行宁 "wide" 在我的笔记本电脑上构建。
这解释了为什么 emoji 字符在本地正确显示,但即使安装了完全相同的代码和依赖项也无法在生产中显示。
为了强制 Heroku 使用 "wide" 构建,我使用 Conda
构建包而不是 python 应用程序的默认构建包。 Conda 似乎 运行 一个广泛的构建,我无论如何都需要它,因为 Pillow/PIL 无法使用默认的 buildpack 正确安装。
我在 Django 1.10 应用程序中使用 Pillow 4.2 在图像上插入一些包含 unicode 表情符号的文本。出于向后兼容的原因,整个 运行 都在 Python 2.7 上。
在本地它就像一个魅力。顺便说一句,我使用 OpenSansEmojis.tff
作为字体。
当我在 Heroku 上推送我的代码时,表情符号字符显示不正确,我得到的是 "square" 字符 (▯)。也就是说,'é'、'è'、'ç' 等重音字符都可以正确显示。
我应该补充一点,这个函数是 运行 由 Celery 4.* worker(Heroku 上的单独 dyno)实现的。
我已经试过了
我尝试设置 PYTHONIOENCODING
但没用。
我尝试使用 the trick mentioned here 但它也没有帮助。
好的,所以有点难以理解,但我认为 Heroku 运行宁 Python 的 narrow build 而我 运行宁 "wide" 在我的笔记本电脑上构建。
这解释了为什么 emoji 字符在本地正确显示,但即使安装了完全相同的代码和依赖项也无法在生产中显示。
为了强制 Heroku 使用 "wide" 构建,我使用 Conda
构建包而不是 python 应用程序的默认构建包。 Conda 似乎 运行 一个广泛的构建,我无论如何都需要它,因为 Pillow/PIL 无法使用默认的 buildpack 正确安装。