1
resposta

__file__ e os.path.abspath(__file__) não são a mesma coisa?

__file__

e

os.path.abspath(__file__)

não são a mesma coisa? Não entendi o porqu}e do professor usar a versão de baixo.

1 resposta

Olá Janderson, tudo bem com você?

Peço desculpas pela demora no retorno.

A função abspath() possui o objetivo de transformar um caminho relativo em um caminho absoluto. Um caminho absoluto, pode ser entendido como um caminho construído a partir da raiz do sistema percorrendo todo o caminho até o arquivo, já o caminho relativo é construído a partir da sua localização atual, não mostrando dessa forma o endereço completo do arquivo.

Por exemplo:

caminho_absoluto = "C:\Users\Alura\Forum\index.html"
caminho_relativo = "Forum\index.html"

Essa necessidade de conversão do tipo através do abspath() necessária devido à diferença de comportamento do método __file__ em diferentes versões do python.

A partir da versão Python 3.9 o método mágico __file__ sempre retorna o caminho absoluto para o módulo onde foi executado. Já nas versões iguais ou anteriores a Python 3.8 o retorno do método mágico __file__ irá depender do local onde foi executado, podendo ser um caminho relativo ou um caminho absoluto.

Caso esteja fazendo uso de uma versão superior ou igual à versão Python 3.9, você poderá declarar o caminho sem o uso da função abspath(), como apresentado abaixo.

UPLOAD_PATH = os.path.dirname(__file__) + '/uploads'

No entanto, por uma questão de didática e visando que o código seja executado da melhor forma possível, seja nas versões iguais a Python 3.9 ou iguais a Python 3.8, foi adotado nas aulas o padrão de conversão do caminho para um caminho absoluto com o uso da função 'abspath()'.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!