Ситуация: у моего скрипта Python есть строка кода, которая копирует себя в другой каталог
shutil.copyfile(os.path.abspath(__file__), newPath)
Проблема: скрипт затем скомпилирован в EXE и запускается. Приведенная погрешность такова:
FileNotFoundError: No such file or Directory: "C:\Path\To\EXE\script.py"
Как вы можете видеть, EXE ищет собственную версию .py
(то есть несжатую версию)
Вопрос: Есть ли еще одна команда Python, которая все еще может позволить исполняемому файлу найти себя, а не версию .py
?
Дополнительная информация: Я собирался попытаться просто заменить .py
на .exe
и посмотреть, работает ли это - если бы программа не сработала, если я изменил имя исполняемого файла.
C:\ > script.exe
#Works as expected
C:\ > ren script.exe program.exe
C:\ > program.exe
FileNotFoundError: No such file or directory: "C:\script.py"
Попробуйте следующее:
from os.path import abspath, splitext
fromfile_without_ext, ext = splitext(abspath(__file__))
shutil.copyfile(fromfile_without_ext + '.exe', newPath)
(Не тестировал, но должен работать...)
__file__
const всегда будет относительным путем к входному сценарию (например,script.py
), где бы и как бы вы ни вызывали исполняемый файл. Правильный способ - использоватьsys.argv[0]
илиsys.executable
.