Форум сайта python.su
Делаю из скрипта exe:
from distutils.core import setup import py2exe setup(console=["main.py"])
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
Отредактировано noob_saibot (Дек. 5, 2013 17:53:26)
Офлайн
Пути к обращению файла не правильные
_file = os.path.abspath(sys.argv[0]) path = os.path.dirname(_file)
Отредактировано helm2004 (Ноя. 7, 2013 11:52:08)
Офлайн
Ниже приведена моя программа:
# -*- 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"
Отредактировано noob_saibot (Ноя. 7, 2013 12:47:31)
Офлайн
У тебя программа не находит этот файл g = Grab(log_file='out2.html')
Укажи ему абсолютный путь.
Офлайн
helm2004Этот html служит для сохранения результата работы grab на компе. После выполнения скрипта, в out2.html мы видим последнюю страницу. out2.html создается автоматически в директории с питоном. НО я для уверенности сделал как вы написали, и добавил в программу:
У тебя программа не находит этот файл g = Grab(log_file='out2.html')Укажи ему абсолютный путь.
_file = os.path.abspath(sys.argv[0]) path = os.path.dirname(_file) g=Grab(log_file=path+"\out2.html")
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 (Ноя. 7, 2013 13:39:33)
Офлайн
Доброе утро.
Вообще траблы какието с 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
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 отрабатывает некорректно. При вводе параметров в скриптере x,y,z,n - имеют тип unicode, при выполнении в exe x,y,z,n - становятся str. Encode не помогает.(Так как это уже строка, видимо) Как мне починить exe чтобы он параметры в str не запихивал?)))
Офлайн
Пробовал выставить кодировку по умолчанию:
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 !
Офлайн
noob_saibot
если у вас есть время и желание как вариант присмотритесь к альтернативам, к примеру cx_freeze мне понравился
Офлайн
JOHN_16Все хорошо, но на рабочем компьютере админы VS2008 ставить не хотят, а без него cx_Freeze не ставится ругается на отсутствие vcvarsall.bat. (Своими силами обеспечиваю работоспособность отдела, а мне даже на встречу не идут) Так что возвращаюсь к py2exe. Рябзииии ну может кто сталкивался с подобными проблемами при работе в py2exe отпишитесь плиииз.
noob_saibotесли у вас есть время и желание как вариант присмотритесь к альтернативам, к примеру cx_freeze мне понравился
Офлайн