Распространение готовых библиотек с модулями Python - PullRequest
4 голосов
/ 31 мая 2011

Я использую следующий скрипт для распространения модуля, содержащего чистый код Python.

from distutils.core import setup, Extension
import os
setup (name = 'mtester',
       version = '0.1',
       description = 'Python wrapper for libmtester',
       packages=['mtester'],
       package_dir={'mtester':'module'},
       )

У меня проблема в том, что я изменил один из файлов, который использует внешнюю библиотеку (файл .so),который мне нужно отправить вместе с существующим модулем.Мне предложили использовать package_data для включения библиотеки.Я изменил скрипт следующим образом.

from distutils.core import setup, Extension
import os
data_dir = os.path.abspath('../lib64/')
setup (name = 'mtester',
       version = '0.1',
       description = 'Python wrapper for libmtester',
       packages=['mtester'],
       package_dir={'mtester':'module'},
       package_data={'mtester':[data_dir+'mhelper.so']},
       )

Проблема в том, что добавление package_data не имело никакого значения.Это не установка mhelper.so ни в каком месте (ни в пакетах сайта, ни в пакетах сайта / mtester).

Информация о системе: Fedora 10, 64-битная версия, Python 2.5 (да, она древняя. Ноэто наша сборочная машина, и она должна оставаться такой же, чтобы поддерживать обратную совместимость)

Любые предложения, которые помогут мне решить эту проблему, будут высоко оценены!

1 Ответ

1 голос
/ 01 июня 2011

К сожалению package_data ищет файлы относительно верхней части пакета.Одно из исправлений - переместить вспомогательную библиотеку в модуль dir с помощью остального кода:

% mv lib64/mhelper.so module/

Затем соответствующим образом изменить аргумент package_data:

package_data = {'mtester': ['mhelper.so']}
...

Затем проверить:

% python setup.py bdist
% tar tf dist/mtester-0.1.linux-x86_64.tar.gz | grep mhelper
./usr/local/lib/python2.5/dist-packages/mtester/mhelper.so
...