我有一个使用gettext
来翻译某些字符串的Scrapy蜘蛛。本地化文件存储在/locale/
。
当我加载翻译时,我使用以下代码执行此操作:
t = gettext.translation('sv', localedir=LOCALE_DIR, languages=['sv'])
使用以下代码在settings.py中设置 LOCALE_DIR
:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOCALE_DIR = os.path.join(BASE_DIR, 'locale')
当我使用scrapy crawl spider
在本地运行代码时,这非常有用。但是当我将其部署到scrapyd
时,它会生成一个.egg文件,并且无法再找到本地化文件。当我从部署版本打印LOCALE_DIR
时。它给了我/tmp/condobot-1428391146-4QuH3E.egg/locale
。
我想这就是无法找到文件的原因。该路径是文件的子文件夹,没有意义。我所期望的是.egg文件将被提取到一个文件夹中,路径将指向/tmp/condobot-1428391146-4quh3e/locale
。
LOCALE_DIR
的路径,而不是我目前的路径?我也尝试将其设置为locale
而没有任何更好的结果。编辑:我使用setup.py
文件,其中包含以下代码:
from setuptools import setup, find_packages
setup(
name = 'project',
version = '1.0',
packages = find_packages(),
entry_points = {'scrapy': ['settings = condobot.settings']},
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['*.mo', '*.po', '*.txt'],
},
)
我还尝试将以下setup.py与MANIFEST.in文件一起使用:
from setuptools import setup, find_packages
setup(
name = 'project',
install_requires = ['distribute'],
version = '1.0',
packages = find_packages(),
entry_points = {'scrapy': ['settings = condobot.settings']},
include_package_data = True,
zip_safe = False,
)
MANIFEST.in
recursive-include locale *
recursive-include condobot/locale *
我的文件结构如下:
- condobot
- locale
- sv
- LC_MESSAGES
sv.mo
pipelines.py
settings.py
- locale
- sv
- LC_MESSAGES
sv.mo
MANIFEST.in
requirements.txt
scrapy.cfg
setup.py
(我已将/ locale /文件夹放在/和/ condobot /中,只是为了确保路径没有错误。)
我已经解压缩.egg文件,我可以确认它确实包含/locale/
文件夹,/locale/
文件夹中有/locale/sv/LC_MESSAGES/sv.mo
和/locale/sv/LC_MESSAGES/sv.po
。< / p>
所以问题似乎不是setup.py文件不包含.egg
文件中的文件。似乎路径/......./file.egg/locale/
不起作用。
答案 0 :(得分:0)
确保在将python模块打包为egg之后可以访问任何其他非源文件的一种方法是将zip_safe
指定为False
以在安装时完全解压缩包,即:
setup(
name = 'project',
version = '1.0',
...
zip_safe = False,
)