У меня есть следующая структура папок:
program_root/
- src/
- tests/
- data/
- templates/
- docs/
- build/
- dist/
- pyproject.toml
- setup.py
- README
- requirements.txt
Мой src/макет:
src/
program/
- _init_.py
p1/
- .env
- module2.py
- module3.py
p2/
-module4.py
-module5.py
Я упаковал это и установил в свой venv, чтобы проверить, работает ли он нормально. Я обнаружил, что мой файл .env не включен в пакет p1, а остальные файлы включены.
(У меня нет секретов, хранящихся в файле .env, и я рад включить их в свой пакет)
Я включил следующее в свой файл toml:
[tool.setuptools.package-data]
"*" = ["*.*"]
Как показывает шаблон, все файлы в моей папке src должны быть включены. но это не так, все файлы .py включены, а файл .env — нет (в моей папке src нет других типов файлов, кроме «.env» и «.py») .
Мой файл toml (для справки):
[build-system]
requires = ["setuptools>=67.0.0", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
package-dir = {"" = "src"}
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
"*" = ["*.*"]
[project]
name = "program"
version = "1.0.0"
authors = [
{name = "xyz", email = "[email protected]" },
]
dynamic = ["dependencies"]
[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}
Пожалуйста, помогите мне понять, делаю ли я что-то не так.
С использованием
[tool.setuptools.package-data]
'src' = ['.env']
из Как включить файлы .json в пакет Python с помощью pyproject.toml?
не сработало.
Мой ответ ниже помог мне. Но я не понимаю, почему для setuptools недостаточно следующего, чтобы включить все файлы в мой пакет.
[tool.setuptools.package-data]
"*" = ["*.*"]
Очевидно, что виртуальная среда не должна быть частью пакета и репозиториев VCS. Я, конечно, не включаю это ни в один из них.






В файл MANIFEST.in (на том же уровне, что и src) я включил следующее:
recursive-include src/program *
Это решило проблему.
Я против добавления виртуальной среды в репозиторий.