Как мне получить путь к текущему исполняемому файлу в Python? - PullRequest
176 голосов
/ 13 апреля 2010

Это может показаться вопросом новичка, но это не так. Некоторые общие подходы работают не во всех случаях:

sys.argv [0]

Это означает использование path = os.path.abspath(os.path.dirname(sys.argv[0])), но это не работает, если вы запускаете из другого скрипта Python в другом каталоге, и это может случиться в реальной жизни.

__ файл __

Это означает использование path = os.path.abspath(os.path.dirname(__file__)), но я обнаружил, что это не работает:

  • py2exe не имеет атрибута __file__, но есть обходной путь
  • При запуске из IDLE с execute() отсутствует атрибут __file__
  • OS X 10.6, где я получаю NameError: global name '__file__' is not defined

Похожие вопросы с неполными ответами:

Я ищу универсальное решение , которое будет работать во всех описанных выше случаях использования.

Обновление

Вот результат теста:

Вывод python a.py (в Windows)

a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz

b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz

a.py

#! /usr/bin/env python
import os, sys

print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print

execfile("subdir/b.py")

подкаталог / b.py

#! /usr/bin/env python
import os, sys

print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print

дерево

C:.
|   a.py
\---subdir
        b.py

Ответы [ 13 ]

0 голосов
/ 04 апреля 2019
import os
current_file_path=os.path.dirname(os.path.realpath('__file__'))
0 голосов
/ 31 марта 2019

Мое решение:

import os
print(os.path.join(os.getcwd(), __file__))
0 голосов
/ 15 ноября 2017

Просто добавьте следующее:

from sys import *
path_to_current_file = sys.argv[0]
print(path_to_current_file)

Или:

from sys import *
print(sys.argv[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...