Если вы используете замороженный скрипт python (замороженный с помощью py2exe) из каталога и диска, отличного от того, где присутствует скрипт, что является лучшим способом определить путь для выполнение скрипта?Как получить путь к исполняемому замороженному сценарию
Несколько решений я попробовал
inspect.getfile(inspect.currentframe())
Проблема: Не возвращает полный путь. Он возвращает только имя сценария.
os.path.abspath(__file__)
Проблема: Не работает на Windows,
os.path.dirname(sys.argv[0])
Проблема: Возвращает пустую строку.
os.path.abspath(inspect.getsourcefile(way3))
не будет работать, если привод отличается от PWD
os.path.dirname(os.path.realpath(sys.argv[0]))
не будет работать, если привод отличается от PWD
Здесь является не минимален -рабочий пример
D:\>path
PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin
D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py
import os, inspect, sys
def way1():
return os.path.dirname(sys.argv[0])
def way2():
return inspect.getfile(inspect.currentframe())
def way3():
return os.path.dirname(os.path.realpath(sys.argv[0]))
def way4():
try:
return os.path.abspath(__file__)
except NameError:
return "Not Found"
def way5():
return os.path.abspath(inspect.getsourcefile(way3))
if __name__ == '__main__':
print "Path to this script is",way1()
print "Path to this script is",way2()
print "Path to this script is",way3()
print "Path to this script is",way4()
print "Path to this script is",way5()
D:\>eggs
Path to this script is
Path to this script is eggs.py
Path to this script is D:\
Path to this script is Not Found
Вопросы, относящиеся:
- How to know the path of the running script in Python?
- How do I get the path and name of the file that is currently executing?
- python, path of script [closed]
Примечание
@ решение Fenikso будет работать, если сценарий находится на тот же диск, на котором вы выполняете, но когда его на другой диск, он не будет работать
Да, это работает также с py2exe. –
@Fenikso: Это работает отлично. Перед публикацией этого вопроса я видел несколько ссылок на одну и ту же проблему в SO, но ни один из ответов не является правильным как таковой. – Abhijit