egg文件中的路径不起作用(os.path.dirname)



我有一个Scrapy spider,它正在使用gettext来翻译一些字符串。本地化文件存储在/locale/中。

当我加载翻译时,我使用以下代码进行翻译:

t = gettext.translation('sv', localedir=LOCALE_DIR, languages=['sv'])

LOCALE_DIR在settings.py中设置,代码如下:

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,
)

中的歧管

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

(我已经将/loce/文件夹放在/和/condobot/中,只是为了确保路径没有错误。)

我已经提取了.egg文件,我可以确认它确实包括/locale/文件夹,在/locale/文件夹中有/locale/sv/LC_MESSAGES/sv.mo/locale/sv/LC_MESSAGES/sv.po

因此,问题似乎并不在于setup.py文件没有包括.egg文件中的文件。路径/......./file.egg/locale/似乎不起作用。

在python模块打包为egg后,确保任何其他非源文件都可以访问的一种方法是将zip_safe指定为False,以便在安装时完全提取包,即:

setup(
    name         = 'project',
    version      = '1.0',
    ...
    zip_safe     = False,
)

最新更新