.egg文件的路径无法正常工作(os.path.dirname)

时间:2015-04-07 07:51:51

标签: python scrapy

我有一个使用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/不起作用。

1 个答案:

答案 0 :(得分:0)

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

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