Создание пакета Python для PIP с некоторыми data_files - PullRequest
2 голосов
/ 28 октября 2011

Я делаю проект с этим макетом:

project/
    bin/
        my_bin.py
    CHANGES.txt
    docs/
    LICENSE.txt
    README.txt
    MANIFEST.in
    setup.py
    project/
        __init__.py
        some_thing.py
        default_data.json
        other_datas/
            default/
                other_default_datas.json

И проблема в том, что когда я устанавливаю это с помощью pip, он помещает папку "default_data.json" и "other_datas" не в то же место, что и остальные приложение.

Как мне сделать, чтобы они были в одном месте?

Они заканчиваются на "/ home / user / .virtualenvs / proj-env / project"

вместо "/ home / user / .virtualenvs / proj-env / lib / python2.6 / site-packages / project"

В setup.py я делаю это так:

inside_dir = 'project'
data_folder= os.path.join(inside_dir,'other_datas')

data_files = [(inside_dir, [os.path.join(inside_dir,'default_data.json')])]
for dirpath, dirnames, filenames in os.walk(data_folder):
    data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])

Ответы [ 3 ]

5 голосов
/ 26 сентября 2014

С https://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files:

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

Каждое имя файла в файлах интерпретируется относительно сценария setup.py в верхней части исходного кода пакета.

Таким образом, описанное поведение просто, как data_files работает.

Если вы хотите включить файлы данных в ваш пакет, вам нужно использовать package_data вместо:

package_data={'project': ['default_data.json', 'other_datas/default/*.json']}
0 голосов
/ 25 февраля 2015

Посмотрите на этот пакет https://pypi.python.org/pypi/datafolder. Он упрощает установку и использование (файлы данных: * .conf, * .ini * .db, ...) для вашего пакета и пользователем .

0 голосов
/ 30 октября 2011

Измените MANIFEST.in, чтобы включить эти .json.

Это, вероятно, сработает:

recursive-include project/ *.json
...