2009-11-13 2 views
9

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

Filesystem моего пакета:

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. Что мне не хватает?

Спасибо!

ответ

4

Вы смотрели на документацию 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, чтобы все файлы были распакованы во время установки.

+0

Отлично, спасибо вам за помощь. Не могли бы вы пояснить разницу между «файлами данных» и «ресурсами», как это определено документацией setuptools, с которой вы связаны? Я следил за инструкциями по ресурсам, но они кажутся качественно разными. Благодаря! – 2009-11-14 01:34:33

+0

Ну, ваш вопрос был в первый раз, когда я когда-либо сталкивался с «ресурсами», поэтому мне тоже интересно, за что они нужны. Но файлы данных, безусловно, подходят для таких вещей, как шаблоны. – pcardune

+8

Обратите внимание, что вам не нужно использовать zip_safe = False. Вместо этого используйте pkg_resources.resource_stream ('packagename', 'templates/file1.txt'). Read() и setuptools получат поток для вас из файловой системы или из застрявшего яйца. –