Neste material, detalharei como você pode criar seu próprio pacote Django privado para ser reutilizado entre diferentes projetos.
Portanto, para acompanhar, usaremos um aplicativo chamado cart que tem a função de manipular pedidos personalizados enviando-os para checkout. Este aplicativo será transformado em um pacote para ser usado por outros projetos Django, onde todos os passos serão explicados para você.
Diretorio Inicial
seu_pacote_django/
└───cart/
│ admin.py
│ apps.py
│ contexts.py
│ models.py
│ urls.py
│ views.py
│ __init__.py
│
├───migrations/
│ __init__.py
│
├───templates/
│ cart.html
│ header2.html
│
└───tests/
test_urls.py
test_views.py
__init__.py
BashComo você pode ver, o diretório inicial tem apenas o aplicativo do carrinho dentro dele. Portanto, para iniciar seu pacote, você precisará criar mais arquivos que lidarão com o processo de construção do pacote, bem como alguns requisitos que você precisará caso, algum dia, queira torná-lo público, talvez adicionando-o ao PYPI.org.
Arquivos Importantes Para Construir o Pacote Django:
Nesta seção serão detalhados os arquivos necessários para construir o pacote do carrinho. Portanto, para facilitar o acompanhamento, a instrução será seguida como nome do arquivo + instrução + código.
1. Arquivo Setup.py
Este é o arquivo mais importante. setup.py representa main quando você chama as funções de instalação. Basicamente, dentro do setup.py você deve adicionar todas as informações necessárias para criar seu pacote. Como o nome do pacote, versão, licença e etc:
# setup.py
import os
from setuptools import find_packages, setup
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
README = readme.read()
# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='cart',
version='0.0.1',
packages=find_packages(),
include_package_data=True,
license='Your license',
description='A cart package that handles payments with stripe.',
long_description=README,
url='yoursite.com',
author='you',
author_email='your@email.com',
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: 3.2',
'Intended Audience :: For my own or company usage',
'License :: OSI Approved :: Your License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)
PythonExistem outras maneiras de configurar o arquivo setup.py com abordagens diferentes. No entanto, eu sugeriria que esta é a melhor e mais fácil maneira de criar seu arquivo setup.py.
2. README.rst file
De acordo com fileinfo.com, a extensão .rst ou linguagem de marcação reStructuredText é um arquivo de texto que contém e suporta código escrito e estilizado. No site Sphinx, é detalhado que a extensão .rst é a principal linguagem de marcação para a criação e design de documentação de código. No entanto, este não é um arquivo realmente necessário para criar seu pacote privado, mas é essencial se um dia você quiser torná-lo público no pypi.org.
clique em view raw para ver o formato de marcação.
Your Django Package
To install:
pip install git+https://github.com/your_name/your_cart_package.git
In your_project.settings.py add:
INSTALLED_APPS = [
...
'cart',
...
]
Migrate the changes from the underwriting_manual app:
$ python manage.py makemigrations cart
$ python manage.py migrate cart
In your_project.urls.py add:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('core.urls')),
path('cart/', include('cart.urls')), # <=====
]
RST3. Arquivo LICENSE.
De acordo com a esri, um arquivo de licença é um arquivo de texto simples que fornece automaticamente as informações necessárias — como nome do produto, número de autorização e informações de contato do usuário — Software Authorization Wizard.
Dependendo do nível de informação que você tem em seu aplicativo, eu aconselho você a ter um arquivo LICENSE bem adaptado para evitar qualquer problema no futuro. No entanto, o arquivo LICENSE também é essencial ao carregar seu pacote para pypi.org.
/* Copyright (C) Your Company Systems, Inc - All Rights Reserved
* Unauthorized copying of this file, via any medium is strictly prohibited
* Proprietary and confidential
* Written by your company attorney <you@yourcompany.com>, December 2021
*/
MarkdownNeste exemplo, usarei um modelo personalizado que pode ser editado por você:
PS: Não sou advogado, portanto, o exemplo de licença não pode ser usado como um conselho ou exemplo do mundo real.
4. MANIFEST.in file
MANIFEST.in é um arquivo de texto que contém uma série de “comandos” em um formato definido pelo Distutils. Os comandos manifest permitem que você inclua ou exclua arquivos e diretórios específicos. Principalmente aqueles que não são reconhecidos pelo python como um diretório porque não contêm o init.py, como o diretório templates/ no Django. E arquivos que não têm a extensão .py e os arquivos que são usados para construir o pacote, como LICENSE e README.rst.
No entanto, o MANIFEST.in é basicamente um conjunto de comandos para incluir no pacote que será reconhecido pelo sdist ao construir seu pacote. Portanto, quando o pacote for criado, se um diretório ou arquivo for especificado, eles estarão lá quando o pacote for construído 😉.
include LICENSE
include README.rst
recursive-include cart/templates *
recursive-include cart/tests *
INIBuildando o Pacote Django
No momento em que você está seguindo este tutorial, no qual iniciamos apenas com o aplicativo cart , ele mudou. Portanto, se você fez tudo corretamente, seu diretório de trabalho deve ficar assim:
seu_pacote_django/
│ LICENSE
│ MANIFEST.in
│ README.rst
│ setup.py
│
└───cart/
│ admin.py
│ apps.py
│ contexts.py
│ models.py
│ urls.py
│ views.py
│ __init__.py
│
├───migrations/
│ __init__.py
│
├───templates/
│ cart.html
│ header2.html
│
└───tests/
test_urls.py
test_views.py
__init__.py
BashAgora, há alguns passos que precisam ser seguidos para iniciar o processo de construção do seu pacote:
Instale os pacotes sdist (distribuição de origem) e whell:
pip install sdist && pip install wheel
Bashnota: Eu consideraria criar um ambiente virtual e instalar os pacotes sdist e whell nele (não se esqueça de adicionar um arquivo .gitignore).
Build do pacote Em Ação:
No diretório raiz do pacote, adicione os seguintes comandos para finalmente compilar o pacote:
python setup.py sdist && python setup.py bdist_wheel
BashDessa forma o pacote será finalmente construído deixando você com o seguinte diretório:
seu_pacote_django/
│ .gitignore
│ LICENSE
│ MANIFEST.in
│ README.rst
│ setup.py
│
├───build/
│ ├───bdist.win-amd64
│ └───lib
│ └───cart/
│ │ admin.py
│ │ apps.py
│ │ contexts.py
│ │ models.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations/
│ │ __init__.py
│ │
│ ├───templates/
│ │ cart.html
│ │ header2.html
│ │
│ └───tests/
│ test_urls.py
│ test_views.py
│ __init__.py
│
├───cart/
│ │ admin.py
│ │ apps.py
│ │ contexts.py
│ │ models.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├───migrations/
│ │ __init__.py
│ │
│ ├───templates/
│ │ cart.html
│ │ header2.html
│ │
│ └───tests/
│ test_urls.py
│ test_views.py
│ __init__.py
│
├───cart.egg-info/
│ dependency_links.txt
│ PKG-INFO
│ SOURCES.txt
│ top_level.txt
│
└───dist/
cart-0.0.1-py3-none-any.whl
cart-0.0.1.tar.gz
BashInstalando Seu Proprio Pacote Django
O próximo passo para usar seu pacote é enviá-lo para um repositório do github para ser usado por você ou sua empresa.
Então, você pode instalar o pacote pelo seguinte comando:
Para repositório privado:
pip install git+ssh://git@github.com:sua_conta/seu_pacote_django.git
BashPara repositório público:
pip install git+https://github.com/sua_conta/seu_pacote_django.git
BashFaça uma pip list para verificar se o pacote do carrinho está instalado no seu ambiente virtual.
$ pip list
Package Version
---------- -------
pip 21.2.4
cart 0.0.1 <-- Aqui
BashPortanto, seguindo este tutorial você aprendeu como construir seu próprio pacote Django que pode ser reutilizado entre diferentes projetos. Por último, mas não menos importante, embora este tutorial tenha exemplificado um aplicativo Django que foi transformado em um pacote, esta abordagem que você aprendeu tem o mesmo processo para criar qualquer pacote Python.