Я пытаюсь создать пакет 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 */__pycache__ или recursive-exclude */__pycache__ *
Спасибо за это предложение. Это сработало и помогло мне понять основную проблему. Моя цель состояла в том, чтобы исключить любые папки тайник, которые пользователь мог оставить перед тем, как внести свой вклад (отсюда и название каталога «contrib»). Эти папки pycache были удалены по вашему предложению! Но впоследствии для каждого в этом.py создавались новые папки! Так что это ВЫГЛЯДИТ так, как будто это не сработало, даже если это сработало.
Есть ли способ отметить последний комментарий доктора философии как правильный ответ? Я не вижу этого.
Комментарии? Нет. Отмечать можно только ответы.





Цель этого поста состояла в том, чтобы включить любые каталоги __pycache__ из пакета pip. На самом деле это невозможно, потому что каждый __init__.py создает каталог __pycache__ после создания манифеста.
Для тех, кто ищет ответ о том, как исключить папки при создании колеса с помощью MANIFEST.in, оба предложения, опубликованные phd, работают:
prune */__pycache__
recursive-exclude */__pycache__ *
prune __pycache__
чернослив только высшего уровня __pycache__. Чтобы обрезать __pycache__ в любом месте иерархии каталогов, используйте
prune */__pycache__
Я пытался исключить папку, а не только файлы. Похоже, в манифесте нет такой опции. Например, команда
pruneисключает все файлы в каталоге, но не сам каталог. Но, возможно, проблема кроется где-то еще в моей настройке. Спасибо, в любом случае.