Наиболее рекомендуемая упаковка для приложений Python CLI для чистой установки PIP и удаления PIP с папками ресурсов с пPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Наиболее рекомендуемая упаковка для приложений Python CLI для чистой установки PIP и удаления PIP с папками ресурсов с п

Сообщение Anonymous »

Основной вопрос < /h1>
Что должно быть структурой файла пакета и его содержимого, так что при установке 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.
Current Attempt
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'],
)
Содержимое pyproject.toml :

Код: Выделить всё

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "myappname"
version = "0.0.0"
requires-python = ">=3.12"
Содержимое manifest.in :

Код: Выделить всё

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)
Минимальное содержание base.py :

Код: Выделить всё

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)
Содержание __ init __. py :

Код: Выделить всё

from .base import main
from .parser import parser
Минимальное содержание для scripts/myappname.py :

Код: Выделить всё

#!/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/bin/myappname.py . Однако, если какая -либо модификация внесена в папку ресурсов, такую ​​как добавление файла, Python -m Pip uninstall сохранит эти файлы, не позволяя чистому удалению.

Код: Выделить всё

$HOME/venvironments/myenv/lib/python3.12/site-packages/myappname/resources
) или идеальный $ home/.myappname Solution.
[/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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»