Как получить доступ к файлам данных во всех случаях установки и распространения с помощью setuptools?

Я заблудился во всех местах, где вы можете добавлять файлы данных. Во-первых, есть MANIFEST.in файл. Как я понимаю, это только для указания исходных файлов, которые будут включены в "исходный дистрибутив". Тогда есть data_files аргумент setup() функция, где вы перечисляете файлы, которые должны быть установлены, но это из корня (либо /, или ~user/.local). И наконец, есть package_data что делает вид, что я хочу... Но на bdist я не вижу никакой разницы с data_files

У меня есть файл данных, скажем "default_conf.cfg".

мой MANIFEST.in содержит:

include default_conf.cfg

и мой setup.py:

setup(
  # ...
  package_data={
    '': ['default_conf.cfg'],
  }
)

Когда я делаю ./setup.py sdist, файл включен, то же самое с ./setup.py bdist (как и ожидалось)

Однако, если я пытаюсь установить как редактируемый пакет (pip install --user -e .), Я не могу получить к нему доступ pkg_resources.resource_string(__name__, 'default_conf.cfg')

Чего мне не хватает, чтобы получить к нему доступ из любого вида при распространении / установке?

(Документация довольно многословна, а информация разбросана по нескольким страницам, поэтому легко что-то упустить.)

РЕДАКТИРОВАТЬ

Я поместил свой файл данных в подкаталог моего модуля, и он выглядит лучше:

my_pkg/
|-my_pkg/
| |-__init__.py
| |-data/
| | |-default_conf.cfg
| 
|-setup.py

setup.py:

setup(
  # ...
  package_data={
    'my_module': ['data/default_conf.cfg'],
  }
)

Тем не менее, когда я пытаюсь pip install --user -e .содержание ссылки.egg /.../my_pkg/build/lib вместо /.../my_pkgто, конечно, он не редактируется в реальном времени... Почему setuptools использует этот путь?

1 ответ

Правка фактически отвечает на вопрос. Проблема с редактируемой установкой была вызвана шагом py2to3, который был по умолчанию в моем шаблоне setup.py.

Другие вопросы по тегам