Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2013 11:47:55

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

py2exe problems

Кстати думал может криво вставляю либы в zip изменил setup:

from distutils.core import setup
import py2exe
setup(console=['latlong.py'], options = {"py2exe": {"includes": ['pycurl',"lxml",'lxml.etree', 'lxml._elementpath', 'grab','grab.ext','grab.ext.text','grab.transport','grab.transport.curl','grab.tools' ]     }})
Но проблему это не решило…

Офлайн

#2 Ноя. 12, 2013 13:52:41

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

py2exe problems

noob_saibot
Все хорошо, но на рабочем компьютере админы VS2008 ставить не хотят, а без него cx_Freeze не ставится ругается на отсутствие vcvarsall.bat.

Зачем он именно на рабочем? Собери на другом, где есть cx-freeze.

Пример про py2exe



Офлайн

#3 Ноя. 14, 2013 13:21:36

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

py2exe problems

Я так полагаю меня люди понять не могут из-за криво сформулированной проблемы поэтому не отвечают (я оптимист):

from grab import Grab
g = Grab(log_file='geo.html')
g.setup(proxy=, proxy_type='http', proxy_userpwd=)
x=raw_input("Sity ")
y=raw_input("Street ")
z=raw_input("Type of street ")
n=raw_input("Number ")
m=0
x.encode()
y.encode()
z.encode()
n.encode()
print type(x)
l="http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n
g.go(l)
print type(l),(l)
stroka=g.xpath_text("//*").split()
lat=float(stroka[-1])
long=float(stroka[-2])
print "Your location:",lat,long
end=raw_input()
Если я выставляю кодировку по умолчанию Utf-8 (в site.py), в PyScriptere отрабатывает как надо, если это же делаю в exe то выдает:
Traceback (most recent call last):
  File "latlong.py", line 10, in <module>
    x.encode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
Следовательно кодировка по умолчанию берется иная, в library.zip файла site.pyo просто нет. Где же мне изменить кодировку чтобы программа заработала? (x.encode(“utf-8”) не меняет ситуацию) Без encode сайт не понимает что я написал и выдает некорректный результат.

Офлайн

#4 Ноя. 18, 2013 13:37:27

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

py2exe problems

Долго мучаясь с изменением кодировок получил:

from grab import Grab
import sys
reload(sys)
if hasattr(sys,"setdefaultencoding"):
     sys.setdefaultencoding("utf-8")
g = Grab(charset="UTF-8")
g.setup(proxy='proxy', proxy_type='http', proxy_userpwd="")
x=raw_input("Sity ")
y=raw_input("Street ")
z=raw_input("Type of street ")
n=raw_input("Number ")
print type(x)
l="http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n
g.go(l)
g.request()
print l
te=g.xpath_text("//*")
stroka=g.xpath_text("//*").split()
lat=stroka[-1]
long=stroka[-2]
print "Your location:",lat,long
print te.encode("cp1251")
end=raw_input()
В питоне вообще ничего не выдает.
В exe при вводе Санкт-петербург Богатырский проспект 30:
<type 'str'>
http://geocode-maps.yandex.ru/1.x/?geocode=+Сантк-петербург,+Богатырский+проспект,+30
ERROR:root:Call to deprecated function xpath_text. Use grab.doc.select().text() instead.
ERROR:root:Call to deprecated function xpath_one. Use grab.doc.select().one() instead.
ERROR:root:Call to deprecated function xpath_list. Use grab.doc.select() instead.
ERROR:root:Call to deprecated function xpath_text. Use grab.doc.select().text() instead.
ERROR:root:Call to deprecated function xpath_one. Use grab.doc.select().one() instead.
ERROR:root:Call to deprecated function xpath_list. Use grab.doc.select() instead.
Your location: 10 0
С нтк-петербург, Бог тырский проспект, 30 0 10
ERROR'ы это рекомендации по грабу как я понял, программа отрабатывает но страницу с данным адресом не открывает (По факту она открывается через браузер).
Подскажите как посмотреть, что отправляется и в каком формате, чтобы понять в чем трабла!
Или может проблема в чем другом? Буду признателен за ЛЮБЫЕ наводки!

Отредактировано noob_saibot (Ноя. 18, 2013 13:39:02)

Офлайн

#5 Дек. 2, 2013 13:55:20

JilkaVaSe
Зарегистрирован: 2013-12-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

py2exe problems

Абсолютно такая же ошибка. В моём тоже есть Grab и я использую cx_Freeze. Как мне кажется(в моём случае это вероятнее всего) дело в криво установленном грабе или в curl, т.к. без них всё было ок. Граб вообще не устанавливался ни в какую(не знаю почему) поэтому просто закинул папку в сайд-паки. С курл та же история.

Офлайн

#6 Дек. 5, 2013 18:08:32

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

py2exe problems

Апну ка я тему!
Программа:

# -*- coding: UTF-8 -*-
from grab import *
g = Grab(log_file='geo.html')
g.setup(proxy='proxy', proxy_type='http', proxy_userpwd="")
x=raw_input("Sity")
y=raw_input("Street")
z=raw_input("Type of street")
n=raw_input("Number")
l="http://geocode-maps.yandex.ru/1.x/?geocode=+"+x+",+"+y+"+"+z+",+"+n
print type(l),l
g.go(l)
print type(l),(l)
stroka=g.doc.select("//*").text()
print "Your location:",stroka.encode("cp1251")

Так выглядит setup:
from distutils.core import setup
import py2exe
import sys
reload(sys)
if hasattr(sys,"setdefaultencoding"):
   sys.setdefaultencoding("cp1251")
setup(console=['latlong.py'], options = {"py2exe": {"includes": ["pycurl","lxml",'lxml.etree', 'lxml._elementpath', 'grab','grab.ext','grab.ext.text','grab.transport','grab.transport.curl','grab.tools' ],"compressed": 1, "optimize": 2,"packages": ['encodings']     }})

При запуске в питоне выдает:
<type 'unicode'> http://geocode-maps.yandex.ru/1.x/?geocode=+Санкт-петербург,++,+
<type 'unicode'> http://geocode-maps.yandex.ru/1.x/?geocode=+Санкт-петербург,++,+
Your location: Санкт-петербург, , 1 10 locality Россия, Санкт-Петербург other Санкт-Петербург RU Россия Северо-Западный федеральный округ Санкт-Петербург Санкт-Петербург Россия Санкт-Петербург 30.042834 59.744465 30.568322 60.090935 30.315868 59.939095

При запуске exe:
Санкт-петербург <type 'str'>
<type 'str'> http://geocode-maps.yandex.ru/1.x/?geocode=+Санкт-петербург,++,+
<type 'str'> http://geocode-maps.yandex.ru/1.x/?geocode=+Санкт-петербург,++,+
Your location: С нкт-петербург, , 0 10
Что происходит с запросом? Из ответа exe видно что на сайт приходит не Санкт-петербург а С нкт-петербург, на каком этапе букву конфискуют?

Офлайн

#7 Дек. 16, 2013 16:58:05

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

py2exe problems

Тадам!!!
Вообщем почти сделал так чтобы работало.
В cmd ввожу chcp1251 -> далее ввожу данные по русски они отображаются иероглифами -> далее программа выдает верный результат.
Подскажите как “налету” поменять кодировку винды?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version