Найти - Пользователи
Полная версия: py2exe problems
Начало » Центр помощи » py2exe problems
1 2
noob_saibot
Делаю из скрипта exe:
from distutils.core import setup
import py2exe
setup(console=["main.py"])
Упаковка проходит успешно, библиотеки которые использую в скрипте упаковываются и складываются в library корректно, но при запуске exe выдает ошибку:
Traceback (most recent call last):
  File "latlong.py", line 4, in <module>
    g = Grab(log_file='out2.html')
  File "grab\base.pyc", line 225, in __init__
    was not executed yet.
  File "grab\base.pyc", line 239, in setup_transport
ImportError: No module named transport.curl
Я так понял косяк в том что библиотека обращается к другой либе которая не была упакована при создании exe?
PS/ Пробовал при создании –includies curl,urllib,pyurl, не помогло. Может не так добавляю? Помогите решить проблему.)
helm2004
Пути к обращению файла не правильные

_file = os.path.abspath(sys.argv[0])
path = os.path.dirname(_file)
noob_saibot
Ниже приведена моя программа:
# -*- coding: utf-8 -*-
from grab import *
import xlrd
g = Grab(log_file='out2.html')
g.setup(proxy='proxy', proxy_type='http', proxy_userpwd='lol:wat')
x=raw_input(u"Город")
y=raw_input(u"Название улицы или что там у тебя")
z=raw_input(u"Улица или шоссе или еще что-то")
n=raw_input(u"Номер")
m=0
g.go("http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n)
stroka=g.xpath_text("//*").split()
lat=float(stroka[-1])
long=float(stroka[-2])
print "Your location:",lat,long
rb = xlrd.open_workbook('D://llla.xls',formatting_info=True)
sheet = rb.sheet_by_index(0)
for x in xrange(1,713):
    lat1=float(sheet.cell_value(x,2))
    long1=float(sheet.cell_value(x,3))
    if (-0.009)<lat-lat1<(0.009) and (-0.009)<long-long1<(0.009):
        print sheet.cell_value(x,1),sheet.cell_value(x,0),sheet.cell_value(x,2),sheet.cell_value(x,3)
        m=m+1
if m==0:
    print "No one"
При запуске в скриптере, программа отрабатывает без ошибок. Далее я её складываю в exe с помощью py2exe. Происходит это автоматически и пути к либам я не указываю. Все эти либы автоматом сложились в library.zip. Где мне необходимо прописать абсолютные пути к либам? В программе или в настройках setup при упаковке exe? Или я все не так понял?

ЗЫ ошибка вылазит при запуске exe
ЗЫ2 Прокси спрятать забыл
helm2004
У тебя программа не находит этот файл g = Grab(log_file='out2.html')
Укажи ему абсолютный путь.
noob_saibot
helm2004
У тебя программа не находит этот файл g = Grab(log_file='out2.html')Укажи ему абсолютный путь.
Этот html служит для сохранения результата работы grab на компе. После выполнения скрипта, в out2.html мы видим последнюю страницу. out2.html создается автоматически в директории с питоном. НО я для уверенности сделал как вы написали, и добавил в программу:
_file = os.path.abspath(sys.argv[0])
path = os.path.dirname(_file)
g=Grab(log_file=path+"\out2.html")
В скриптере выполняется, в exe все таже ошибка:
Traceback (most recent call last):
  File "latlong.py", line 9, in <module>
    g = Grab(log_file=path+'\out2.html')
  File "grab\base.pyc", line 225, in __init__
  File "grab\base.pyc", line 239, in setup_transport
ImportError: No module named transport.curl

ЗЫ я даже сделал так:
g=Grab()
Все осталось по прежнему.
noob_saibot
Доброе утро.
Вообще траблы какието с py2exe, делаю подобную программу на mechanize:
# -*- coding: UTF-8 -*-
import mechanize
x=raw_input("Sity ")
y=raw_input("Street ")
z=raw_input("Type of street ")
n=raw_input("Number ")
br=mechanize.Browser()
br.set_proxies({'http':proxy:1234'})
br.add_proxy_password('nick','pswd')
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time=1)
print type(x)
x=x.encode("cp1251")
y=y.encode("cp1251")
z=z.encode("cp1251")
n=n.encode("cp1251")
print ("http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n)
res=br.open("http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n)
print res
content = res.read()
print content
coord=str(content).split()
lat=str(coord[-6]).split("<")
long=str(coord[-7]).split(">")
lat2=lat[0]
long2=long[1]
print lat,long,lat2,long2
в питоне отрабатывает стабильно.
Перевожу в exe:
Traceback (most recent call last):
  File "mechanize3.py", line 21, in <module>
    x=x.encode("cp1251")
  File "encodings\cp1251.pyc", line 12, in encode
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa2 in position 0: ordinal not in range(128)
Играя с кодировками починил exe файл (в скриптере работать перестал), он отрабатывает, но обращаясь к интернет странице выдает неверный результат, видимо проблема в кодировке (На запрашиваемой странице кодировка UTF-8). Логики почему не работает в exe и работает в скриптере и наоборот я не уловил. Может кто подскажет? Или на pyinstaller перейти? Но хотелось бы разобраться…
noob_saibot
Вообщем первую проблему решил в тупую скопировав все библиотеки из граба. Но exe отрабатывает некорректно. При вводе параметров в скриптере x,y,z,n - имеют тип unicode, при выполнении в exe x,y,z,n - становятся str. Encode не помогает.(Так как это уже строка, видимо) Как мне починить exe чтобы он параметры в str не запихивал?)))
noob_saibot
Пробовал выставить кодировку по умолчанию:
def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "unicode" # Default value set by _PyUnicode_Init()
    if 0:
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0:
        # Enable to switch off string to Unicode coercion and implicit
        # Unicode to string conversion.
        encoding = "undefined"
    if encoding != "unicode":
        # On Non-Unicode builds this will raise an AttributeError...
        sys.setdefaultencoding(encoding) # Needs Python Unicode build !
не помогло.
JOHN_16
noob_saibot
если у вас есть время и желание как вариант присмотритесь к альтернативам, к примеру cx_freeze мне понравился
noob_saibot
JOHN_16
noob_saibotесли у вас есть время и желание как вариант присмотритесь к альтернативам, к примеру cx_freeze мне понравился
Все хорошо, но на рабочем компьютере админы VS2008 ставить не хотят, а без него cx_Freeze не ставится ругается на отсутствие vcvarsall.bat. (Своими силами обеспечиваю работоспособность отдела, а мне даже на встречу не идут) Так что возвращаюсь к py2exe. Рябзииии ну может кто сталкивался с подобными проблемами при работе в 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