__File__ из Pyinstaller EXE ссылается на файл .py

1

Ситуация: у моего скрипта 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"
Теги:
python-3.x
executable
pyinstaller

1 ответ

1

Попробуйте следующее:

from os.path import abspath, splitext
fromfile_without_ext, ext = splitext(abspath(__file__))
shutil.copyfile(fromfile_without_ext + '.exe', newPath)

(Не тестировал, но должен работать...)

  • 0
    Я попробую, когда доберусь до этого. Спасибо
  • 1
    Это не правильный путь. Потому что __file__ const всегда будет относительным путем к входному сценарию (например, script.py ), где бы и как бы вы ни вызывали исполняемый файл. Правильный способ - использовать sys.argv[0] или sys.executable .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню