Форум сайта python.su
Всем привет. Никак не находятся решения на 2 вопроса. Занимаюсь сборкой проекта на винде на cpython-е 3.3 в самостоятельно (без питона на компе) исполняемую ерунду с помощью cx_Freeze. Со всеми опциями, из руководства на офф-сайте разобрался, прога работает, но хочется лучше:
1) в папке с программой получается много файлов. Предполагаю, что python33.dll, tcl85.dll, tk85.dll спрятать никуда не получится, все таки важные библиотеки, эти можно потерпеть. Кроме этого в корне у меня лежат несколько модулей, написанных на c, вот об них я споткнулся: обычные питоновские модули без проблем прячутся в сам exe-шник, а эти чем хуже? Также через import подключаю. Как их убрать, хотябы в один zip? Пробовал в setup-е прописывать, вроде
zip_includes = [('C:\project\_timex.pyd','_timex.pyd')]
Офлайн
pyinstaller вроде все в один файл запихивает
по идее все используемые модули можно вписать как функции или классы в код программы ,получится прожка на мнооого строк кода
Офлайн
Про pyinstaller на оффициальном сайте написано:
Multiversion: works under any version of Python from 2.3 up to 2.7.
Офлайн
Видимо опытные питонщики в основном на 2-м пока сидят
Офлайн
evgen34В основном все программы так и выглядят, если сильно хочется запихните все в .sfx архив
в папке с программой получается много файлов
Офлайн
Программы так и выглядят обычно, с компактностью можно смириться. Мне больше интересен второй вопрос: возможно ли импортировать модули не с файловой системы, а из переменной, например, как объект bytes из памяти? Неужели никто не сталкивался с подобной необходимостью?
Офлайн
Если я правильно понял,то
допустим берете модуль os ,копируете его содержимое в ваш код и без всякого импорта пользуетесь
import sys, errno _names = sys.builtin_module_names # Note: more names are added to __all__ later. __all__ = ["altsep", "curdir", "pardir", "sep", "extsep", "pathsep", "linesep", "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR", "SEEK_END"] def _get_exports_list(module): try: return list(module.__all__) except AttributeError: return [n for n in dir(module) if n[0] != '_'] ..... def walk(top, topdown=True, onerror=None, followlinks=False): ...... #здесь ваш код но уже не os.walk for i,r,t in walk('.'): print i
Отредактировано sanodin (Июнь 1, 2013 09:36:50)
Офлайн
sanodin, спасибо, но в принципе это то же, что ты предложил в первом посту - собрать все модули в один скрипт. Для скриптов на питоне - это какое-то решение, но если мой модуль написан на си, то его никак не добавить в скрипт. По загрузке модулей из zip в нете ничего не нашел. Хотя, cx_Freeze часть модулей добавляет в library.zip и они прекрасно от туда подгружаются и работают, а значит впринципе это возможно, только кто знает молчит об этом
Офлайн
из корня проекта тоже не подхватывает(сишные)? не из архива
в архиве сишные наверное не подхватит,по крайней мере здесь http://python.su/forum/topic/6402/lofi/ так говорят
ну и эту тему посмотрите http://habrahabr.ru/post/149621/
Отредактировано sanodin (Июнь 3, 2013 16:52:03)
Офлайн
sanodin, спасиба! IronPython - это действительно выход. Все равно я пишу на винде и для винды, а там .net на любом корыте стоит изначально. И для некоторых решений стандартную библиотеку не тянет, так что буду пробовать эту штуку. Хотя он пока совместим с 2.7 питоном, но готовится переход на третий, чему я рад. Что касается http://py2exe.svn.sourceforge.net/viewvc/py2exe/trunk/py2exe/zipextimporter.py?view=markup, то это все же громоздкое решение.
Можно считать вопрос решеным, буду пробовать .NET
Офлайн