Как при создании пакета pip исключить каталоги с помощью Manifest.in?

Я пытаюсь создать пакет pip, и когда я создаю пакет, он всегда включает подкаталоги __pycache__. Я использую MANIFEST.in, чтобы указать, какие типы файлов следует включать, и это работает хорошо.

Как указать MANIFEST.in исключить определенные папки в любом месте пакета?

Редактировать: Я пытаюсь исключить каталог, а не только файл. В манифесте есть несколько вариантов исключения файлов, например global-exclude или recursive-exclude. Но варианта global-exclude-dir нет, поэтому и спросил здесь.

Мой setup.py выглядит так:

from setuptools import setup, find_packages

setup(
    name='my_package',
    version='0.0.1',
    install_requires=[
        'importlib-metadata; python_version == "3.8"',
    ],
    include_package_data=True,
    package_dir = {"my_package": "contrib"},   # renamed src to contrib 
)

Манифест содержит следующее:

global-include *.npy *.npz
global-include *.txt
# [+ current exclude-directory test]

Команды global-include работают как положено. Я попробовал следующее, чтобы исключить любые каталоги __pycache__ (спасибо @phd за их предложения):

prune __pycache__
prune */__pycache__ 
recursive-exclude */__pycache__ *

Я пытался исключить папку, а не только файлы. Похоже, в манифесте нет такой опции. Например, команда prune исключает все файлы в каталоге, но не сам каталог. Но, возможно, проблема кроется где-то еще в моей настройке. Спасибо, в любом случае.

partypeter 11.05.2022 04:36

Попробуйте prune */__pycache__ или recursive-exclude */__pycache__ *

phd 11.05.2022 07:44

Спасибо за это предложение. Это сработало и помогло мне понять основную проблему. Моя цель состояла в том, чтобы исключить любые папки тайник, которые пользователь мог оставить перед тем, как внести свой вклад (отсюда и название каталога «contrib»). Эти папки pycache были удалены по вашему предложению! Но впоследствии для каждого в этом.py создавались новые папки! Так что это ВЫГЛЯДИТ так, как будто это не сработало, даже если это сработало.

partypeter 11.05.2022 08:15

Есть ли способ отметить последний комментарий доктора философии как правильный ответ? Я не вижу этого.

partypeter 11.05.2022 08:23

Комментарии? Нет. Отмечать можно только ответы.

phd 11.05.2022 08:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
15
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Цель этого поста состояла в том, чтобы включить любые каталоги __pycache__ из пакета pip. На самом деле это невозможно, потому что каждый __init__.py создает каталог __pycache__ после создания манифеста.

Для тех, кто ищет ответ о том, как исключить папки при создании колеса с помощью MANIFEST.in, оба предложения, опубликованные phd, работают:

prune */__pycache__ 
recursive-exclude */__pycache__ *
Ответ принят как подходящий
prune __pycache__

чернослив только высшего уровня __pycache__. Чтобы обрезать __pycache__ в любом месте иерархии каталогов, используйте

prune */__pycache__ 

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