Учитывая эту структуру каталогов (пустые __init__.py и logging.yml подойдут):
foo
│ setup.py
│
└─── foo
│ __init__.py
│
└─── config
logging.yml
Вот моя попытка, это setup.py:
from os import path
from setuptools import find_packages, setup
package_name = "foo"
if __name__ == "__main__":
setup(
name=package_name,
packages=find_packages(),
package_dir = {package_name: package_name},
package_data = {"config":[path.join(package_name, "config", "logging.yml")]},
include_package_data=True,
)
# Also tried:
# package_data = {"config": [path.join("config", "logging.yml")]}
# package_data = {"": [path.join("config", "logging.yml")]}
# package_data = {"": [path.join(package_name, "config", "logging.yml")]}
Никаких ошибок после python setup.py install (также пробовал python -m pip install .), но запуск из корня моего виртуального окружения fd -HIFuuueyml logging не возвращает никаких результатов и отсутствует в foo.egg-info\SOURCES.txt.
PS: Тестирование локально с 3.13.0a5; инструменты настройки 69.2.0; пип 24.0. Но во время моего CI-тестирования и выпуска версий 2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 для Windows, Linux и macOS.
С помощью package_data = {"config":… вы заявляете, что config является пакетом. Но это не так. Итак, ответ на вопрос в заголовке: нет. Опять же, документация: setuptools.pypa.io/en/latest/userguide/datafiles.html
@phd — В своем комментарии я указываю другие способы, которыми я это сделал package_data. Я попробую удалить package_dir и посмотреть, исправит ли это проблему. Обновлено: Нет, это тоже не сработало. Перепробовал все варианты package_data, перечисленные в моем вопросе.






Это работает:
from setuptools import find_packages, setup
package_name = "foo"
if __name__ == "__main__":
setup(
name=package_name,
packages=find_packages(),
package_data = {"foo": ["config/logging.yml"]},
include_package_data=True,
)
У вас только 1 (один) пакет foo, поэтому ваш package_data должен быть именно к этому пакету.
Ого, наконец-то я нашел свой logging.yml. Это C:\[dir]\Python\Python313\Lib\site-packages\foo, а не [virtualenv]\Lib\site-packages\foo. Хотя мой virtualenv определенно активирован. Хм.
Хорошо, с py в Windows это работает на 3.13.0a5 и 2.7.18. Спасибо
@SamuelMarks Каким-то образом вы установили пакет глобально, а не в [virtualenv]. Если вам удастся установить его в [virtualenv], вы обязательно найдете файл данных по адресу [virtualenv]\Lib\site-packages\foo\config\logging.yml.
Да, Windows вела себя странно. python.exe определенно был в [virtualenv], но пакеты устанавливались по всему миру. Переключение на py в активированном виртуальном окружении решило проблему.
Эта часть неверна независимо от данных упаковки:
package_dir = {package_name: package_name}. См. документацию по адресу setuptools.pypa.io/en/latest/userguide/package_discovery.html . С вашей структурой каталогов вам вообще не нуженpackage_dir; мой совет - удалить строку.