Как получить доступ к файлам данных во всех случаях установки и распространения с помощью 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.