Найти - Пользователи
Полная версия: cx_Freeze и загрузка модулей из zip
Начало » Python для новичков » cx_Freeze и загрузка модулей из zip
1 2
evgen34
Всем привет. Никак не находятся решения на 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')]
а толку никакого, в zip-е лежат, но не подхватываются. Если возможно их спрятать, может и _tkinter.pyd и другие pyd-ы убрать получится?
2) а второй вопрос такой: возможно ли импортировать модули не с файловой системы, а из переменной, например, как объект bytes из памяти? Мне интересен не схожий эффект, а чтобы эти модули вели себя как модули при обычном импорте. Возможно ли это?
Спасибо
sanodin
pyinstaller вроде все в один файл запихивает

по идее все используемые модули можно вписать как функции или классы в код программы ,получится прожка на мнооого строк кода
evgen34
Про pyinstaller на оффициальном сайте написано:
Multiversion: works under any version of Python from 2.3 up to 2.7.
А мне нравится на 3-м писать, переделывать под 2-й не хочу.
В один модуль собрать можно, конечно, но это не выход - придется еще кучу времени тратить на то, что должно это время экономить - тоже не вариант. Мне хотя бы разобраться со вторым вопросом.
evgen34
Видимо опытные питонщики в основном на 2-м пока сидят
sanodin
evgen34
в папке с программой получается много файлов
В основном все программы так и выглядят, если сильно хочется запихните все в .sfx архив
evgen34
Программы так и выглядят обычно, с компактностью можно смириться. Мне больше интересен второй вопрос: возможно ли импортировать модули не с файловой системы, а из переменной, например, как объект bytes из памяти? Неужели никто не сталкивался с подобной необходимостью?
sanodin
Если я правильно понял,то
допустим берете модуль 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
,но модуль os так же импортирует модули sys , errno и еще кучу других, их тоже тогда так же надо вносить в ваш код

или я не о том?
evgen34
sanodin, спасибо, но в принципе это то же, что ты предложил в первом посту - собрать все модули в один скрипт. Для скриптов на питоне - это какое-то решение, но если мой модуль написан на си, то его никак не добавить в скрипт. По загрузке модулей из zip в нете ничего не нашел. Хотя, cx_Freeze часть модулей добавляет в library.zip и они прекрасно от туда подгружаются и работают, а значит впринципе это возможно, только кто знает молчит об этом
sanodin
из корня проекта тоже не подхватывает(сишные)? не из архива

в архиве сишные наверное не подхватит,по крайней мере здесь http://python.su/forum/topic/6402/lofi/ так говорят

ну и эту тему посмотрите http://habrahabr.ru/post/149621/
evgen34
sanodin, спасиба! IronPython - это действительно выход. Все равно я пишу на винде и для винды, а там .net на любом корыте стоит изначально. И для некоторых решений стандартную библиотеку не тянет, так что буду пробовать эту штуку. Хотя он пока совместим с 2.7 питоном, но готовится переход на третий, чему я рад. Что касается http://py2exe.svn.sourceforge.net/viewvc/py2exe/trunk/py2exe/zipextimporter.py?view=markup, то это все же громоздкое решение.
Можно считать вопрос решеным, буду пробовать .NET
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