A = os.path.join(os.path.dirname(__file__), '..')
B = os.path.dirname(os.path.realpath(__file__))
C = os.path.abspath(os.path.dirname(__file__))
Normalmente, eu apenas os conto com o caminho real. Mas há uma razão para essas instruções que determinam o caminho no tempo de execução, e eu realmente gostaria de entender o módulo os.path para que eu possa começar a usá-lo.
__file__
NÃO é definido em todos os casos, por exemplo, módulos C vinculados estaticamente. Não podemos contar com a__file__
disponibilidade sempre.name '__file__' is not defined
.__file__
é o nome do caminho do arquivo do qual o módulo foi carregado, se foi carregado de um arquivo. Este meio__file__
só irá funcionar quando você executá-lo como um script não em intérprete (a menos que você importá-lo no intérprete ...).Eu só quero resolver alguma confusão primeiro.
__file__
não é um curinga, é um atributo. Os atributos e métodos de sublinhado duplo são considerados "especiais" por convenção e servem a um propósito especial.http://docs.python.org/reference/datamodel.html mostra muitos dos métodos e atributos especiais, se não todos.
Nesse caso,
__file__
é um atributo de um módulo (um objeto de módulo). No Python, um.py
arquivo é um módulo. Entãoimport amodule
, terá um atributo__file__
que significa coisas diferentes em circunstâncias diferentes.Retirado dos documentos:
No seu caso, o módulo está acessando seu próprio
__file__
atributo no espaço para nome global.Para ver isso em ação, tente:
E corra:
fonte
De acordo com a documentação :
e também :
fonte
O uso
__file__
combinado com váriosos.path
módulos permite que todos os caminhos sejam relativos ao local do diretório atual do módulo. Isso permite que seus módulos / projetos sejam portáteis para outras máquinas.No seu projeto, você faz:
e tente implantá-lo no seu servidor com um diretório de implantações, para que
/home/web/mydevproject/
seu código não encontre os caminhos corretamente.fonte