Как включить файл .env в мой пакет Python с помощью pyproject.toml?

У меня есть следующая структура папок:

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]
"*" = ["*.*"]

Я против добавления виртуальной среды в репозиторий.

Jeyekomon 01.07.2024 11:09

Очевидно, что виртуальная среда не должна быть частью пакета и репозиториев VCS. Я, конечно, не включаю это ни в один из них.

Devarapalli Vamsi 01.07.2024 11:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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