Упаковка ресурсов с помощью setuptools /ести - PullRequest
10 голосов
/ 14 ноября 2009

Я разрабатываю яйцо Python, которое имеет несколько зависимостей .txt (это шаблоны, используемые для генерации файлов самим яйцом), и я пытаюсь скопировать эти зависимости в site-packages во время setup.py install. Согласно документации distribute ...

Файловая система моего пакета:

setup.py
package
|--- __init__.py
|--- main.py
|--- binary (calls main.py with pkg_resources.load_entry_point)
|--- templates
     |--file1.txt
     |--file2.txt

В setup.py:

setup(
    [...]
    eager_resources = ['templates/file1.txt', 'templates/file2.txt']
)

В моем пакете:

from pkg_resources import resource_string
tpl = resource_string(__name__, 'templates/file1.txt')

... эта комбинация конфигурации и файловой системы должна привести к тому, что file1.txt и file2.txt будут доступны через pkg_resources.resource_string. К сожалению, они не копируются в site-packages во время setup.py install. Чего мне не хватает?

Спасибо!

1 Ответ

4 голосов
/ 14 ноября 2009

Вы смотрели документацию по setuptools для включения данных пакета здесь: http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

По сути, вам просто нужно установить include_package_data=True в вашем файле setup.py. Если вы используете Subversion или CVS, все версионные файлы будут включены. Если нет, вы можете указать, какие файлы включать в файл MANIFEST.in.

Я полагаю, что распространение также поддерживает это.

Затем вы можете получить доступ к файлам так, как если бы они не были упакованы. то есть в main.py вы можете иметь:

import os.path
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt'))
print f.read()
f.close()

и это будет работать и в упакованной версии. Одно предостережение: вам нужно также установить zip_safe = False в файле setup.py, чтобы все файлы были разархивированы во время установки.

...