Найти - Пользователи
Полная версия: Проблемы с cx_freeze: os.chdir(sys.path[0]), библиотеки
Начало » Python для новичков » Проблемы с cx_freeze: os.chdir(sys.path[0]), библиотеки
1
Kogrom
Возникли некоторые проблемы с 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 по умолчанию толкает в папку к исполнимому файлу кучу библиотек. Это необходимые по смыслу библиотеки, но хотелось бы их вынести в отдельную папку, или, может быть, в архив. Как это лучше сделать?
pyuser
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(), "имя_файла_настроек")
2. Я бы тоже очень хотел узнать, как заставить cx_freeze, подобно py2exe, паковать все в один файл :(
Kogrom
pyuser
изменять текущий каталог мне кажется не рациональным. почему бы просто не указать полный путь к файлу настроек?
Согласен. Но у меня несколько файлов и мой подход был наиболее быстрой поправкой к готовой кривой программе. Но, конечно, лучше просто передавать путь к директории.
pyuser
2. Я бы тоже очень хотел узнать, как заставить cx_freeze, подобно py2exe, паковать все в один файл :(
Возможно, есть какие-либо дополнительные программы для такого подхода.

Однако, мне не обязательно чтобы всё было в одном файле. Достаточно, чтобы все библиотеки лежали в одной папке. В принципе, можно написать какую-нибудь “пускалку” на си, которая передаст данные о папке с настройками и т.п. Но это костыль.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB