Использование setuptools для копирования не .py файлов - PullRequest
0 голосов
/ 01 марта 2019

Мой проект Python устанавливается через setup.py.Структура проекта выглядит следующим образом:

├── Makefile
├── README.rst
├── circle.yml
├── docs
│   ├── Makefile
│   ├── conf.py
│   ├── deps.txt
│   ├── guide_installation.rst
│   ├── guide_model.rst
│   ├── guide_transliteration.rst
│   ├── index.rst
│   ├── make.bat
│   └── module_trans.rst
├── indictrans
│   ├── __init__.py
│   ├── _decode
│   ├── _utils
│   ├── base.py
│   ├── iso_code_transformer.py
│   ├── libindic_
│   ├── mappings
│   ├── models
│   ├── polyglot_tokenizer
│   ├── script_transliterate.py
│   ├── test.py
│   ├── tests
│   ├── transliterator.py
│   ├── trunk
│   └── unicode_marks.py
├── requirements.txt
├── setup.cfg
├── setup.py
├── test-requirements.txt
└── tox.ini

, где подпапка indictrans/models выглядит как

├── ben-eng
│   ├── classes.npy
│   ├── coef.npy
│   ├── intercept_final.npy
│   ├── intercept_init.npy
│   ├── intercept_trans.npy
│   └── sparse.vec
├── ben-guj
│   ├── classes.npy
│   ├── coef.npy
│   ├── intercept_final.npy
│   ├── intercept_init.npy
│   ├── intercept_trans.npy
│   └── sparse.vec

, поэтому у меня есть файлы .npy и .vec, которые необходимо включить в проект.В моем setup.py я пытаюсь явно включить эту папку models через директиву include_package_data, например:

setup(
    setup_requires=['pbr'],
    pbr=True,
    packages=find_packages(),
    include_package_data=True,
    package_data={'models': ['*.npy','*.vec']},
    ext_modules=cythonize(extensions)
)

, а в setup.cfg у меня есть

[files]
packages = 
    indictrans

но при запуске python setup.py install папка моделей не копируется в папку установки /usr/local/lib/python2.7/dist-packages/indictrans/.

Если я распечатываю, это вывод find_packages I

['indictrans', 'indictrans.tests', 'indictrans.libindic_', 'indictrans._utils', 'indictrans._decode', 'indictrans.polyglot_tokenizer', 'indictrans.models', 'indictrans.trunk', 'indictrans.libindic_.utils', 'indictrans.libindic_.soundex', 'indictrans.libindic_.utils.tests', 'indictrans.libindic_.soundex.utils', 'indictrans.libindic_.soundex.tests', 'indictrans.libindic_.soundex.utils.tests', 'indictrans.polyglot_tokenizer.tests', 'indictrans.trunk.tests']

поэтому я предполагаю, что indictrans/models будет включено, но это не так.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

include_package_data=True требуется MANIFEST.in .

Чтобы включить данные для модуля indictrans.models, необходимо указать полное имя:

package_data={'indictrans.models': ['*.npy','*.vec']},
0 голосов
/ 01 марта 2019
  1. Добавьте include_package_data=True к вашей setup -функции (вы это уже сделали).
  2. Создайте файл MANIFEST.in в том же каталоге, что и setup.py

MANIFEST.in может выглядеть следующим образом:

include indictrans/models/ben-eng/*
include indictrans/models/ben-guj/*

Вам не нужен setup.cfg для этого.

Источник: Эта великолепная рецензия на упаковку Python

РЕДАКТИРОВАТЬ около recursive-include: Согласно документации это также должно работать:

recursive-include indictrans/models *.npy *.vec
...