У меня есть программа на Python, которую я компилирую в Windows .exe с помощью py2exe. Используя Inno Setup , я создаю установщик Windows.
Природа моей программы такова, что она использует плагины, которые позже импортируются с помощью оператора __ import __ ()
. Эти плагины находятся в папке plugins, которая сама по себе является подпапкой, в которой находится файл .exe моей программы.
Теперь, чтобы программа нашла плагины, она раньше имела следующий оператор где-то в верхней части моего файла:
sys.path+= ['.']
Однако это не сработало, когда пользователь запускал программу через меню «Пуск» Windows, потому что по-видимому, рабочая папка была установлена в меню «Пуск» (вместо того, где находится .exe). Итак, '.'
не соответствовал тому, что я хотел.
Я исправил это, изменив оператор на следующий, чтобы оператор __ import __ ()
также просматривал папку, в которой находится .exe (потому что argv [0]
- это полный путь к исполняемому файлу):
sys.path+= [os.path.dirname(sys.argv[0])]
Однако я не уверен, что выбрал правильное решение. Особенно потому, что моя программа предназначена для кроссплатформенности (Windows, OSX, Linux), а в документации sys.argv говорится о argv [0], что «зависит от операционной системы, является ли это полным путем. или нет'.
Должен ли я решить эту проблему по-другому, или мой подход в порядке?