Найти - Пользователи
Полная версия: Создание .exe (py2exe или cxFreeze)
Начало » Python для новичков » Создание .exe (py2exe или cxFreeze)
1
Silm
Добрый день.

Есть парсер написаный на python с библиотеками Grab и PyQuery.
Необходимо создать .exe для удобной передачи и простого запуска другими людми. Я скачал и установил py2exe создал файл setup.py с таким содержанием:
from distutils.core import setup
import py2exe
setup(console=['run.py'])

выполнил: python setup.py py2exe

процесс прошел без ошибок, но при попытке запустит run.exe в консоль выводит такую ошибку:

Traceback (most recent call last):
File "run.py", line 12, in <module>
File "grab\spider\__init__.pyc", line 1, in <module>
File "grab\spider\base.pyc", line 18, in <module>
ImportError: No module named dbm

в самом исходном файле библиоткеки есть такая конструкция:
try:
    import anydbm as dbm
except ImportError:
    import dbm

есть подозрение, что надо что то прописать в setup.py, пытался найти что вообще можно прописывать туда, но ничего толком не нашел.

Python 2.7 x32
4kpt_II
Не мучайте себя. Попробуйте cxFreeze…
Там все интуитивно понятно и есть хороший туториал.
Silm
4kpt_II
Не мучайте себя. Попробуйте cxFreeze…Там все интуитивно понятно и есть хороший туториал.
попробовал cxFreeze. Те же проблемы. При создании билда заметил что cxFreeze выдает такую инфу:

Missing modules:
? BeautifulSoup imported from lxml.html.soupparser
? _dummy_threading imported from dummy_threading
? _emx_link imported from os
? _scproxy imported from urllib
? _sysconfigdata imported from distutils.sysconfig
? ce imported from os
? cssselect imported from pyquery.cssselectpatch
? cssselect.xpath imported from pyquery.cssselectpatch
? dbm imported from grab.spider.base, whichdb
? deliverance imported from pyquery.rules
? deliverance.proxycommand imported from pyquery.rules
? deliverance.pyref imported from pyquery.rules
? django.core.files.base imported from grab.ext.django
? fcntl imported from subprocess
? grp imported from shutil, tarfile
? html.entities imported from grab.tools.html, lxml.html.soupparser
? html5lib imported from lxml.html.html5parser
? html5lib.treebuilders.etree_lxml imported from lxml.html.html5parser
? java.lang imported from xml.sax._exceptions
? jsonpath_rw imported from grab.selector.selector
? netbios imported from uuid
? org.python.core imported from copy, pickle, xml.sax
? os.path imported from grab.ext.ftp, grab.spider.pattern, os, shlex, shutil
? os2 imported from os
? os2emxpath imported from os
? posix imported from os
? pwd imported from getpass, posixpath, shutil, tarfile, webbrowser
? queue imported from grab.spider.base, grab.spider.command_controller
? redis imported from grab.spider.command_controller
? requests imported from pyquery.openers
? restkit imported from pyquery
? restkit.contrib.wsgi_proxy imported from pyquery.ajax
? riscos imported from os
? riscosenviron imported from os
? riscospath imported from os
? rourl2path imported from urllib
? termios imported from getpass
? urllib.error imported from grab.proxylist
? urllib.parse imported from grab.base, grab.ext.django, grab.ext.form, grab.ext.lxml, grab.response, grab.spider.base, grab.tools.files, grab.tools.http, lxml.html, lxml.html.clean, lxml.html.html5parser, pyquery.openers, pyquery.pyquery
? urllib.request imported from grab.proxylist, grab.response, lxml.html, lxml.html.html5parser, pyquery.openers
? webob imported from pyquery, pyquery.ajax
? win32wnet imported from uuid
This is not necessarily a problem - the modules may not be needed on this platform.

То есть он пропускает импорт некоторых модулей, среди них есть и dbm, на отсутствие которого ругается программа при попытки запуска скомпилированного файла.

глядя на ошибку и код
try:
    import anydbm as dbm
except ImportError:
    import dbm
попробовал переименовать в library.zip (архив с библиотеками куда упаковывает всё нужное cxFreeze) файл anydbm.pyc на dbm.pyc и при запуске программа перестала ругаться на отсутствие этой библиотеки (не знаю будет ли оно так работать). Но при этом все равно вылетает ошибка, что не получается найти модуль по имени cssselect, в то же время при компиляции было сообщение что пропущен импорт модуля: cssselect imported from pyquery.cssselectpatch

я попробывал переписать setup.py так:
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["cssselect"]}
setup(  name = "pareser",
        version = "0.1",
		options = {"build_exe": build_exe_options},
        executables = [Executable("run.py")])

но в результате получил ошибку при сборке:
  File "C:\Python27\lib\distutils\command\build.py", line 127, in run
self.run_command(cmd_name)
File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Python27\lib\site-packages\cx_Freeze\dist.py", line 235, in run
freezer.Freeze()
File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 575, in Freeze
self.finder = self._GetModuleFinder()
File "C:\Python27\lib\site-packages\cx_Freeze\freezer.py", line 330, in _GetModuleFinder
finder.IncludePackage(name)
File "C:\Python27\lib\site-packages\cx_Freeze\finder.py", line 579, in IncludePackage
module = self._ImportModule(name, deferredImports)
File "C:\Python27\lib\site-packages\cx_Freeze\finder.py", line 288, in _ImportModule
raise ImportError("No module named %r" % name)
ImportError: No module named 'cssselect'

При этом если импортировать cssselect в коде программы, то при ее запуске ошибок не возникает.

Как заставить cxFreeze импортировать то что мне надо?
sanodin
setup.py
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "includes": ["cssselect"]}
base = None
if sys.platform == "win32":
    base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("C:\Python27\Scripts\script.py", base=base)])
python setup.py build
раз ошибку выдает , значит модуль cssselect , входит в какой либо пакет, который нужно импортировать тоже
просмотри по ошибкам какие модули упоминались и дописывай , pyquery.cssselectpatch
либо найди этот модуль в site-packages и положи в архив с модулями, расширение .pyc , соблюдая путь
либо этот пакет не может импортировать и запихнуть в сборку “C:\Python27\Lib\site-packages\cssselect-0.9.1-py2.7.egg” если это он, то распаковать zip -ом и добавить в архив с модулями папку cssselect
плохо наверное с переименованием dbm.pyc, найдите этот модуль в site-packages и положите в архив
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