Что должно быть структурой файла пакета и его содержимого, так что при установке PIP он создаст папку приложений, где он будет хранить переменную сумму файлов, используемых только приложением, изначально заполненным ресурсами Python Packag Удалить папку приложения? < /p>
контекст базовой среды < /h2>
- Давайте предположим, что ОС Linux, где она типична для создания в доме пользователя. us assume python>=3.12
- Let us assume that it is intended to be installed with python -m pip install in a virtual environment, lets say a conda environment located at $HOME/venvironments/myenv.
Package Описание < /h2>
Я хочу создать приложение Python с CLI для пользователя. CLI имеет три основных действий, print , set и add :
- print позволяет печатать содержимое файлов в $ home/.myappname/, какая при установке будет только то, что есть файлы. template_00.txt .
- Добавить позволяет пользователю добавить в правильное место () файл.
Код: Выделить всё
$HOME/.myappname/
- set позволяет пользователю изменять содержимое переменных в defaults.ini через интерфейс командной строки.
Структура пакета исходной.
Код: Выделить всё
- package/
| - myappname/
| | - __init__.py
| | - parser.py
| | - base.py
| | - scripts/
| | | - myappname.py
| | - resources/
| | | - defaults.ini
| | | - template_00.txt
| - setup.py
| - pyproject.toml
| - MANIFEST.in
Содержимое setup.py :
Код: Выделить всё
import setuptools
setuptools.setup(
name = 'myappname',
version = '0.0.0',
packages = setuptools.find_packages(),
python_requires = '>=3.12',
include_package_data = True,
package_data = {'resources': ['myappname/resources/*']},
scripts = ['myappname/scripts/myappname.py'],
)
Код: Выделить всё
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "myappname"
version = "0.0.0"
requires-python = ">=3.12"
Код: Выделить всё
recursive-include myappname/resources *
global-exclude *.pyc
global-exclude .git
< /code>
Минимальное содержание parser.py:
import argparse
def create_print_options(parser):
pass
def create_add_options(parser):
pass
def create_set_options(parser):
pass
parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(help='sub-command help',dest='command')
printparser = subparsers.add_parser('print')
create_print_options(printparser)
addparser = subparsers.add_parser('add')
create_add_options(addparser)
setparser = subparsers.add_parser('set')
create_set_options(setparser)
Код: Выделить всё
import importlib.resources
RESOURCESPATH = importlib.resources.file(__package__)/'resources'
def print_main(*args):
# Do stuff
# Use the RESOURCESPATH variable to find the files to print
pass
def add_main(*args):
# Do stuff
# Use the RESOURCESPATH variable to copy the file to that folder
pass
def set_main(*args):
# Do stuff
# Use the RESOURCESPATH variable to find defaults.ini
pass
def main(args):
if args.command == 'print':
return print_main(args)
if args.command == 'add':
return add_main(args)
if args.command == 'set':
return set_main(args)
Код: Выделить всё
from .base import main
from .parser import parser
Код: Выделить всё
#!/bin/usr/env python3
from myappname import main, parser
if __name__ == '__name__':
args = parser.parse_arguments()
main(args)
< /code>
Основные задачи < /h2>
[list]
[*] При установке этот пакет не будет создавать папку $ home /.myappname. Хотя ожидается, что он не включен каким -либо образом в настройку, поскольку я не знаю, где я должен его искать. $ Home/venvironments/myenv/lib/python3.12/site-packages/myappname/resources
Код: Выделить всё
$HOME/venvironments/myenv/lib/python3.12/site-packages/myappname/resources
[/list]
Обратите внимание, что при упрощенном примере уключение PIP не будет показывать упомянутое поведение
, так как нет файлов. /> Это можно легко высмеивать, создав файл в месте после
Код: Выделить всё
python -m pip install path/to/myappsrc/< /code>
Например:
touch HOME/venvironments/myenv/lib/python3.12/site-packages/myappname/resources/mockfile.txt< /code>
Затем попытка удалить
python -m pip uninstall myappname
Подробнее здесь: https://stackoverflow.com/questions/796 ... nd-pip-uni