MANIFEST.in игнорируется при установке python setup.py - файлы данных не установлены?

Вот мой урезанный скрипт setup.py с удаленным некодированным материалом:

#!/usr/bin/env python

from distutils.core import setup
from whyteboard.misc import meta


setup(
    name = 'Whyteboard',
    version = meta.version,

    packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
                'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],

    py_modules = ['whyteboard'],
    scripts = ['whyteboard.py'],
)

MANIFEST.in:

include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png

Когда я запускаю «python setup.py install sdist», я получаю красивый .tar. gz с корневой папкой "whyteboard-0.41" с папками locale / images / и whyteboard-help / внутри.Также здесь находится мой файл whyteboard.py скрипт, который запускает мою программу из исходного пакета whyteboard.

Итак:

whyteboard/
 ├── locale/
 ├── images
 ├── whyteboard-help/
 ├── whyteboard/
 │  ├── __init__.py
 │  └── other packages etc
 ├── whyteboard.py
 ├── README
 ├── setup.py
 └── CHANGELOG

Это отражает исходный код моей программы, все так и должно быть, и это правильно.

Однако, когда я запускаю «python setup.py install», ни один из моих файлов данных не записывается - только исходный пакет «whyteboard», а файл whyteboard.py помещается в /usr/local/lib/python2.6/dist -пакеты /.

В идеале я бы хотел, чтобы та же структура каталогов, что была создана в файле .tar.gz, была создана в пакетах dist, поскольку именно так моя программа ожидает искать свои ресурсы.

Как я могу получить «установку» для создания этой структуры каталогов? Насколько я могу судить, он игнорирует мой файл манифеста.

78
задан bschlueter 5 March 2017 в 03:57
поделиться

2 ответа

Некоторые примечания в дополнение к ответу Неда (который затрагивает основную проблему):

Distutils не устанавливает пакеты и модули Python в подкаталог для каждого проекта внутри site-packages. (или dist-packages в Debian/Ubuntu): они устанавливаются непосредственно в site-packages, как вы видели. Таким образом, содержащий каталог whiteboard-xx в вашем sdist не будет существовать в окончательной установленной форме.

Одним из следствий этого является то, что вы должны быть осторожны, называя свои файлы_данных таким образом, чтобы было ясно, к какому проекту они принадлежат, потому что эти файлы/каталоги устанавливаются непосредственно на глобальный сайт- packages, а не внутри каталога, содержащего whiteboard.

Или вместо этого вы можете сделать свои данные package_data из пакета whiteboard (что означает, что они должны находиться внутри этого пакета, т.е. рядом с __init__.py ), и тогда это не проблема.

Наконец, не имеет особого смысла иметь модуль whyteboard.py в py_modules и пакет whiteboard/__init__.py в пакеты. Они являются взаимоисключающими, и если у вас есть оба, модуль whyteboard.py будет игнорироваться при импорте в пользу одноименного пакета.

Если whyteboard.py — это просто скрипт, который не предназначен для импорта, для него следует использовать параметр scripts и удалить его из py_modules. .

26
ответ дан 24 November 2019 в 10:38
поделиться

MANIFEST.in сообщает Distutils, какие файлы включать в исходный дистрибутив, но напрямую не влияет на то, какие файлы устанавливаются. Для этого вам необходимо включить соответствующие файлы в файл setup.py, как правило, либо как данные пакета, либо как дополнительные файлы.

56
ответ дан 24 November 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: