Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2010 21:15:42

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с cx_freeze: os.chdir(sys.path[0]), библиотеки

Возникли некоторые проблемы с 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 по умолчанию толкает в папку к исполнимому файлу кучу библиотек. Это необходимые по смыслу библиотеки, но хотелось бы их вынести в отдельную папку, или, может быть, в архив. Как это лучше сделать?



Офлайн

#2 Окт. 1, 2010 04:50:38

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Проблемы с cx_freeze: os.chdir(sys.path[0]), библиотеки

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, паковать все в один файл :(



Офлайн

#3 Окт. 1, 2010 13:44:02

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с cx_freeze: os.chdir(sys.path[0]), библиотеки

pyuser
изменять текущий каталог мне кажется не рациональным. почему бы просто не указать полный путь к файлу настроек?
Согласен. Но у меня несколько файлов и мой подход был наиболее быстрой поправкой к готовой кривой программе. Но, конечно, лучше просто передавать путь к директории.
pyuser
2. Я бы тоже очень хотел узнать, как заставить cx_freeze, подобно py2exe, паковать все в один файл :(
Возможно, есть какие-либо дополнительные программы для такого подхода.

Однако, мне не обязательно чтобы всё было в одном файле. Достаточно, чтобы все библиотеки лежали в одной папке. В принципе, можно написать какую-нибудь “пускалку” на си, которая передаст данные о папке с настройками и т.п. Но это костыль.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version