Ответ 1
TL; DR: ключи в словарях package_data
- это пакеты; значения - это списки глобусов. ''
не является допустимым именем для любого пакета Python.
Если вы хотите установить bar.txt
рядом с __init__.py
пакета foo
, используйте
package_data={'foo': ['bar.txt']}
У меня есть макет:
foo/
__init__.py
bar.txt
setup.py
Теперь, если foo
- это пакет, как указано выше, выполните:
import setuptools
setuptools.setup(
name='foo',
version='2015.3',
license='commercial',
packages=setuptools.find_packages(),
package_data={'foo': ['bar.txt']},
)
И после python setup.py sdist
, я проверяю содержимое dist/foo-2015.3.tar.gz
% tar tfz dist/foo-2015.3.tar.gz
...
foo-2015.3/foo/bar.txt
...
Однако, если я запустил ваш setup.py
с помощью package_data={'': ['foo/bar.txt']}
, я могу согласиться, что foo/bar.txt
не будет добавлен в исходный дистрибутив, за исключением того, что если foo-2015.3.egg-info/SOURCES.txt
уже имеет строку для foo/bar.txt
- в в этом случае файл также появится в дистрибутиве источника
Никакой манифест не использовался; версия setuptools была 3.6
(я специально установил ту же самую старую версию, которую вы использовали):
>>> import setuptools
>>> setuptools.__version__
'3.6'
Поведение выше также работает в стандартном distutils
: 2.6 Установка данных пакета в документацию "наследие" distutils; с комментарием для 2.7, 3.1:
Изменено в версии [2.7, 3.1]: все файлы, соответствующие
package_data
, будут добавлены в файлMANIFEST
, если не предоставляется шаблон.