Setup.py не устанавливать файлы данных

У меня есть библиотека Python, которая, помимо обычных модулей Python, имеет некоторые файлы данных, которые нужно зайти в /usr/local/lib/python 2.7/dist-package/mylibrary.

К сожалению, мне не удалось убедить setup.py в фактической установке там файлов данных. Обратите внимание, что это поведение находится в папке install - not sdist.

Вот слегка отредактированная версия setup.py

module_list = list_of_files

setup(name         ='Modules',
      version      ='1.33.7',
      description  ='My Sweet Module',
      author       ='PN',
      author_email ='email',
      url          ='url',
      packages     = ['my_module'],

# I tried this. It got installed in /usr/my_module. Not ok.

      # data_files   = [ ("my_module",  ["my_module/data1",
      #                                  "my_module/data2"])]

# This doesn't install it at all.
      package_data = {"my_module" : ["my_module/data1",
                                     "my_module/data2"] }
     )

Это в Python 2.7 (нужно будет запустить в версии 2.6 в конце), и ему придется запускать на некоторых Ubuntu между 10.04 и 12+. Разработка его прямо сейчас 12.04.

Ответ 1

http://docs.python.org/distutils/setupscript.html#installing-additional-files

Если каталог является относительным путем, он интерпретируется относительно установочный префикс (Pythons sys.prefix для пакетов pure-Python, sys.exec_prefix для пакетов, содержащих модули расширения).

Это, вероятно, сделает это:

data_files   = [ ("my_module",  ["local/lib/python2.7/dist-package/my_module/data1",
                                 "local/lib/python2.7/dist-package/my_module/data2"])]

Или просто используйте join, чтобы добавить префикс:

data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module")
data_files   = [ ("my_module",  [os.path.join(data_dir, "data1"),
                                 os.path.join(data_dir, "data2")])]

Ответ 2

UPD: package_data принимает dict в формате {'package': ['list', 'of?', 'globs*']}, поэтому, чтобы заставить его работать, нужно указать оболочки оболочки относительно пакета dir, а не пути к файлу относительно корня распространения.

data_files имеет другое значение и, в общем, следует избегать использования этого параметра.

С setuptools вам нужно только include_package_data=True, но файлы данных должны находиться в системе управления версиями, которая известна setuptools (по умолчанию она распознает только CVS и SVN, устанавливает setuptools-git или setuptools-hg, если вы используете git или рт...)


с помощью setuptools вы можете:

- в MANIFEST.im:

    include my_module/data*

- в setup.py:

    setup(
        ...
        include_package_data = True,
        ...
    )