Eu tenho feito scripts Python para tarefas simples no trabalho e nunca me incomodei em empacotá-los para que outros usem. Agora fui designado para criar um wrapper Python para uma API REST. Não tenho absolutamente nenhuma idéia de como começar e preciso de ajuda.
O que eu tenho:
(Só quero ser o mais específico possível) Eu tenho o virtualenv pronto, também está no github , o arquivo .gitignore para python também está lá, além disso, a biblioteca de solicitações para interagir com a API REST. É isso aí.
Aqui está a árvore de diretórios atual
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
Nem sei onde colocar os arquivos .py, se algum dia eu fizer um.
O que eu queria fazer:
Torne um módulo python instalável com "pip install ..."
Se possível, quero um processo geral passo a passo para escrever módulos Python.
fonte
Respostas:
Um módulo é um arquivo que contém definições e instruções Python. O nome do arquivo é o nome do módulo com o sufixo
.py
crie
hello.py
e escreva a seguinte função como seu conteúdo:Então você pode importar
hello
:Para agrupar muitos
.py
arquivos, coloque-os em uma pasta. Qualquer pasta com um__init__.py
é considerada um módulo por python e você pode chamá-los de pacoteVocê pode continuar com a declaração de importação no seu módulo da maneira usual.
Para mais informações, consulte 6.4. Pacotes .
fonte
Python 3 - ATUALIZADO 18 de novembro de 2015
Achei a resposta aceita útil, mas desejei expandir vários pontos em benefício de outros, com base em minhas próprias experiências.
Módulo: Um módulo é um arquivo que contém definições e instruções Python. O nome do arquivo é o nome do módulo com o sufixo .py anexado.
Exemplo de módulo : Suponha que tenhamos um único script python no diretório atual, aqui estou chamando-o mymodule.py
O arquivo mymodule.py contém o seguinte código:
Se executarmos o interpretador python3 a partir do diretório atual, poderemos importar e executar a função myfunc das seguintes maneiras diferentes (você normalmente escolheria uma das seguintes opções):
Ok, então isso foi fácil o suficiente.
Agora, suponha que você precise colocar este módulo em sua própria pasta dedicada para fornecer um espaço para nome do módulo, em vez de apenas executá-lo ad-hoc no diretório de trabalho atual. É aqui que vale a pena explicar o conceito de pacote .
Pacote : Pacotes são uma maneira de estruturar o espaço de nome do módulo do Python usando “nomes de módulo pontilhado”. Por exemplo, o nome do módulo AB designa um submódulo chamado B em um pacote chamado A. Assim como o uso de módulos evita que os autores de módulos diferentes se preocupem com os nomes de variáveis globais um do outro, o uso de nomes de módulo pontilhado salva os autores de pacotes com vários módulos, como o NumPy ou a Python Imaging Library, de se preocupar com os nomes dos módulos um do outro.
Exemplo de pacote : Vamos agora assumir que temos a seguinte pasta e arquivos. Aqui, mymodule.py é idêntico a antes e __init__.py é um arquivo vazio:
Os arquivos __init__.py são necessários para fazer o Python tratar os diretórios como contendo pacotes. Para mais informações, consulte o link da documentação dos Módulos, fornecido posteriormente.
Nosso diretório de trabalho atual está um nível acima da pasta comum chamada mypackage
Se rodarmos o interpretador python3 agora, poderemos importar e executar o módulo mymodule.py que contém a função necessária myfunc das seguintes maneiras diferentes (você normalmente escolheria uma das seguintes opções):
Supondo que o Python 3, haja excelente documentação em: Módulos
Em termos de convenções de nomenclatura para pacotes e módulos, as diretrizes gerais são fornecidas em PEP-0008 - consulte Nomes de Pacotes e Módulos
Os módulos devem ter nomes curtos e todos em minúsculas. Sublinhados podem ser usados no nome do módulo se melhorar a legibilidade. Os pacotes Python também devem ter nomes curtos, todos em minúsculas, embora o uso de sublinhados seja desencorajado.
fonte
import mypackage
. No caso de você querer importar apenas uma função de um módulo (mesmo um arquivo), é melhor usarfrom module import function
. No caso de uma subpastafrom subfolder.module import function
, você pode simplesmente chamar semfunction()
disparar outras partes do código. Além disso, não usefrom module import *
se você realmente não precisa.import mypackage
? Adicionandoimport mymodule
a__init__.py
não funciona ..Como ninguém cobriu ainda esta questão do OP:
Aqui está um exemplo mínimo absoluto, mostrando as etapas básicas de preparação e upload do seu pacote para o PyPI usando
setuptools
etwine
.Isso não substitui a leitura de pelo menos o tutorial ; há muito mais do que abordado neste exemplo muito básico.
A criação do pacote em si já é abordada por outras respostas aqui, portanto, vamos assumir que temos essa etapa coberta e nossa estrutura de projeto como esta:
Para usar
setuptools
no empacotamento, precisamos adicionar um arquivosetup.py
, que vai para a pasta raiz do nosso projeto:No mínimo, especificamos os metadados para o nosso pacote, e
setup.py
ficaria assim:Desde que configuramos
license='MIT'
, incluímos uma cópia em nosso projeto comoLICENCE.txt
, juntamente com um arquivo leia-me em reStructuredText comoREADME.rst
:Neste ponto, estamos prontos para começar a empacotar usando
setuptools
, se ainda não o tivermos instalado, podemos instalá-lo compip
:Para fazer isso e criar uma
source distribution
, em nossa pasta raiz do projeto, chamamos nossa asetup.py
partir da linha de comando, especificando que queremossdist
:Isso criará nosso pacote de distribuição e informações sobre o ovo e resultará em uma estrutura de pastas como esta, com nosso pacote em
dist
:Neste ponto, temos um pacote que podemos instalar usando
pip
, portanto, a partir da raiz do nosso projeto (assumindo que você tenha toda a nomeação como neste exemplo):Se tudo correr bem, agora podemos abrir um intérprete Python, eu diria em algum lugar fora do diretório do projeto para evitar qualquer confusão e tentar usar nosso novo pacote:
Agora que confirmamos a instalação e o funcionamento do pacote, podemos carregá-lo no PyPI.
Como não queremos poluir o repositório ativo com nossos experimentos, criamos uma conta para o repositório de teste e instalamos
twine
o processo de upload:Agora estamos quase lá, com a nossa conta criada, simplesmente pedimos
twine
para fazer o upload do nosso pacote, ele solicitará nossas credenciais e fará o upload do pacote no repositório especificado:Agora podemos fazer login em nossa conta no repositório de teste do PyPI e nos maravilhar com nosso pacote recém-carregado por um tempo, e depois pegá-lo usando
pip
:Como podemos ver, o processo básico não é muito complicado. Como eu disse anteriormente, há muito mais do que o abordado aqui, então vá em frente e leia o tutorial para obter uma explicação mais aprofundada.
fonte
setuptools
?twine
, mas você pode testar seu pacote localmente antes de publicar depois de criá-losetuptools
.Depois de definir os comandos escolhidos, você pode simplesmente arrastar e soltar o arquivo salvo na pasta Lib nos seus arquivos de programa python.
fonte
Crie um arquivo chamado "hello.py"
Se você estiver usando o Python 2.x
Se você estiver usando o Python 3.x
Execute o arquivo Em seguida, você pode tentar o seguinte:
Se você quiser um pouco mais, pode usar o seguinte:
Se você estiver usando o Python 2.x
Se você estiver usando o Python 3.x
Veja aquele entre parênteses ao lado do define? Aquilo é importante. É o que você pode usar dentro da definição.
Texto - Você pode usá-lo quando quiser que o programa diga o que deseja. De acordo com o nome, é texto. Espero que você saiba o que significa texto. Significa "palavras" ou "frases".
Execute o arquivo Em seguida, você pode tentar o seguinte se estiver usando o Python 3.x:
Para Python 2.x - acho que a mesma coisa com Python 3? Nenhuma idéia. Corrija-me se eu cometer um erro no Python 2.x (eu conheço o Python 2, mas estou acostumado com o Python 3)
fonte
Criei um projeto para iniciar facilmente um esqueleto do projeto a partir do zero . https://github.com/MacHu-GWU/pygitrepo-project .
E você pode criar um projeto de teste, digamos
learn_creating_py_package
,.Você pode aprender qual componente deve ter para diferentes fins, como :
A vantagem de usar
pygitrepo
é que esses tedioso são criados automaticamente em si e adaptar o seupackage_name
,project_name
,github_account
,document host service
,windows or macos or linux
.É um bom lugar para aprender a desenvolver um projeto python como um profissional.
Espero que isso possa ajudar.
Obrigado.
fonte