python import - Como escrever um módulo / pacote Python?




3 Answers

Um módulo é um arquivo contendo definições e instruções do Python. O nome do arquivo é o nome do módulo com o sufixo .py

crie hello.py e escreva a seguinte função como conteúdo:

def helloworld():
   print "hello"

Então você pode importar hello :

>>> import hello
>>> hello.helloworld()
'hello'
>>>

Para agrupar muitos arquivos .py coloque-os em uma pasta. Qualquer pasta com um __init__.py é considerada um módulo por python e você pode chamá-los de pacote

|-HelloModule
  |_ __init__.py
  |_ hellomodule.py

Você pode ir com a declaração de importação em seu módulo da maneira usual.

Para mais informações, consulte 6.4. Pacotes

module __all__

Eu tenho feito scripts Python para tarefas simples no trabalho e nunca me importei em empacotá-los para os outros usarem. Agora eu fui designado para fazer um wrapper Python para uma API REST. Não tenho absolutamente nenhuma ideia 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, ele também está no github , o arquivo .gitignore para python também está lá, além da 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

Eu nem sei onde colocar os arquivos .py, se eu fizer um.

O que eu queria fazer:

Tornar um módulo python apto para instalação com "pip install ..."

Se possível, quero um processo geral passo a passo para escrever módulos Python.




Já que ninguém cobriu essa questão do OP ainda:

O que eu queria fazer:

Tornar um módulo python apto para instalação com "pip install ..."

Aqui está um exemplo mínimo, mostrando as etapas básicas de preparação e upload de seu pacote para o PyPI usando setuptools e twine .

Isto não é de modo algum um substituto para a leitura, pelo menos, do tutorial , há muito mais do que coberto neste exemplo muito básico.

Criar o pacote em si já é coberto por outras respostas aqui, então vamos supor que temos essa etapa coberta e nossa estrutura de projeto da seguinte forma:

.
└── hello/
    ├── __init__.py
    └── hello.py

Para usar o setuptools para o empacotamento, precisamos adicionar um arquivo setup.py , isso vai para a pasta raiz do nosso projeto:

.
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

No mínimo, nós especificamos os metadados para o nosso pacote, o nosso setup.py ficaria assim:

from setuptools import setup

setup(
    name='hello',
    version='0.0.1',
    description='a pip-installable package example',
    license='MIT',
    packages=['hello'],
    author='Benjamin Gerfelder',
    author_email='[email protected]',
    keywords=['example'],
    url='https://github.com/bgse/hello'
)

Como definimos license='MIT' , incluímos uma cópia em nosso projeto como LICENCE.txt , junto com um arquivo leia-me em reStructuredText como README.rst :

.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

Neste ponto, estamos prontos para começar a empacotar usando setuptools , se não tivermos já instalado, podemos instalá-lo com o pip :

pip install setuptools

Para fazer isso e criar uma source distribution , na nossa pasta raiz do projeto, chamamos nosso setup.py da linha de comando, especificando que queremos sdist :

python setup.py sdist

Isso criará nosso pacote de distribuição e informação de ovo, e resultará em uma estrutura de pastas como essa, com nosso pacote em dist :

.
├── dist/
├── hello.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hello/
    ├── __init__.py
    └── hello.py

Neste ponto, temos um pacote que podemos instalar usando o pip , então a partir do nosso projeto raiz (assumindo que você tenha todos os nomes como neste exemplo):

pip install ./dist/hello-0.0.1.tar.gz

Se tudo correr bem, agora podemos abrir um interpretador Python, eu diria em algum lugar fora do diretório do nosso projeto para evitar qualquer confusão, e tentar usar nosso novo pacote brilhante:

Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hello import hello
>>> hello.greeting()
'Hello !'

Agora que confirmamos o pacote de instalação e funciona, podemos enviá-lo para o PyPI.

Como não queremos poluir o repositório ao vivo com nossos experimentos, criamos uma conta para o repositório de teste e instalamos o twine para o processo de upload:

pip install twine

Agora estamos quase lá, com a nossa conta criada, nós simplesmente dizemos ao twine para fazer o upload do nosso pacote, ele pedirá nossas credenciais e fará o upload do nosso pacote para o repositório especificado:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

Agora podemos entrar em nossa conta no repositório de teste do PyPI e nos maravilhar com o nosso pacote recém-carregado por um tempo, e então pegá-lo usando pip :

pip install --index-url https://test.pypi.org/simple/ hello

Como podemos ver, o processo básico não é muito complicado. Como eu disse anteriormente, há muito mais do que aqui, então vá em frente e leia o tutorial para uma explicação mais aprofundada.




Crie um arquivo chamado "hello.py"

Se você estiver usando o Python 2.x

def func():
    print "Hello"

Se você estiver usando o Python 3.x

def func():
    print("Hello")

Execute o arquivo. Então, você pode tentar o seguinte:

>>> import hello
>>> hello.func()
Hello

Se você quiser um pouco difícil, você pode usar o seguinte:

Se você estiver usando o Python 2.x

def say(text):
    print text

Se você estiver usando o Python 3.x

def say(text):
    print(text)

Veja aquele no parêntese ao lado do define? Aquilo é importante. É aquele que você pode usar dentro do define.

Texto - Você pode usá-lo quando quiser que o programa diga o que quiser. Segundo seu nome, é texto. Espero que você saiba o que significa texto. Significa "palavras" ou "frases".

Execute o arquivo. Então, você pode tentar o seguinte se estiver usando o Python 3.x:

>>> import hello
>>> hello.say("hi")
hi
>>> from hello import say
>>> say("test")
test

Para o Python 2.x - eu acho a mesma coisa com o Python 3? Nenhuma idéia. Corrija-me se eu cometer um erro no Python 2.x (eu sei Python 2, mas eu sou usado com o Python 3)




Related

python python-2.7 python-module