Skip to main content

Documentação TweePInA

Rodando o script com caminhos absolutos

Para que o Python detecte todas as dependências, é necessário rodar o script como um módulo, pois quando rodado diretamente, é impossível para o Python, detectar qualquer script importado que não esteja em uma subpasta ou que não tenha sido instalado pelo gerenciador de pacotes.

Portanto, dada a estrutura atual do projeto:

tweepina/api_v2/api_twitter/api_academic/

Quando rodamos um script diretamente, como no exemplo :

python tweepina/api_v2/api_twitter/api_academic/collected_perfis.py

O script collected_perfis.py só localizará scripts em sua pasta ou em subpastas, qualquer método de importação que busque importar algo de uma pasta acima de api_academic irá falhar.

Para resolver este problema, precisamos rodar o script como um módulo. De uma pasta superior, neste caso a pasta tweepina, rodamos o comando python -m, e ao invés de especificar o caminho do arquivo, especificamos o que queremos rodar da seguinte maneira (lembre-se, que estamos dentro da pasta raiz do projeto, tweepina):

python -m api_v2.api_twitter.api_academic.collected_perfis

Desta forma, toda esta estrutura passada como um argumento (api_v2.api_twitter.api_academic) fica visível para o script em questão. Esta estrutura é chamada de pacote. (tecnicamente, o pacote é o módulo pai desta estrutura). Cada subnível (dividido por pontos) é vista pelo python como um módulo. Módulos que estão aninhados nos subníveis desta estrutura são chamados também de submódulos.

A única diferença é que todos os imports devem ser modificados, no projeto inteiro, para refletir esta estrutura. Portanto, no arquivo collected_perfis.py, os imports locais que antes eram:

from twitter_api import create_headers, get_perfis, create_endpoint, connect_to_endpoint, flatten_tweets
from get_tweets import get_last_tweet, main_get_tweets
from get_info import main_get_info

Para:

from api_v2.api_twitter.api_academic.twitter_api import create_headers, get_perfis, create_endpoint, connect_to_endpoint, flatten_tweets
from api_v2.api_twitter.api_academic.get_tweets import get_last_tweet, main_get_tweets
from api_v2.api_twitter.api_academic.get_info import main_get_info

O primeiro exemplo mostra imports relativos, neste segundo, os imports são absolutos. Apesar do nome, no Python, os imports absolutos só são absolutos em relação à estrutura do pacote, ou seja, não têm relação nenhuma com caminhos absolutos no sistema de arquivos. Desta forma, se o comando python -m for chamado de um outro local, explicitando outra estrutura para o pacote, os imports deverão ser alterados de acordo.