Форум сайта python.su
Возникли некоторые проблемы с cx_freeze. Одну наполовину решил, но решил тоже озвучить.
1. В чистых скриптах использовал строку
os.chdir(sys.path)
чтобы если запускаюсь по ссылке (ярлыку, автозапуска с диска т.п.), мог бы найти файл с настройками.
Когда создаю автономное приложение с помощью cx_freeze (да и с py2exe вроде бы такое было) мне выдаётся ошибка:
OSError: Not a directory: ‘Путь к исполнимому файлу’.
Сработало такое:
os.chdir(os.path.dirname(os.path.abspath(sys.argv)))
но выглядит как-то громоздко.
2. cx_freeze по умолчанию толкает в папку к исполнимому файлу кучу библиотек. Это необходимые по смыслу библиотеки, но хотелось бы их вынести в отдельную папку, или, может быть, в архив. Как это лучше сделать?
Офлайн
1. py2exe рекомендует для определения папки с исполняемым файлом использовать следующую функцию
def module_path():
if hasattr(sys, "frozen"):
return os.path.dirname(unicode(sys.executable, sys.getfilesystemencoding()))
return os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
# c учетом выше приведенного кода
filename = os.path.join(module_path(), "имя_файла_настроек")
Офлайн
pyuserСогласен. Но у меня несколько файлов и мой подход был наиболее быстрой поправкой к готовой кривой программе. Но, конечно, лучше просто передавать путь к директории.
изменять текущий каталог мне кажется не рациональным. почему бы просто не указать полный путь к файлу настроек?
pyuserВозможно, есть какие-либо дополнительные программы для такого подхода.
2. Я бы тоже очень хотел узнать, как заставить cx_freeze, подобно py2exe, паковать все в один файл :(
Офлайн