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