а у меня вот возникла в точности такая же надобность, я вспомнил про эту тему и начал изучать все что тут предлагалось. начал с webgen, но в моем случае он нормально работать не пожелал, а т.к. Ruby я не знаю и пока изучать не собираюсь - то ситуация стала тупиковой и я начал двигатся в сторону pubtal, тем более что python мне потенциально интересен. pubtal мне отлично подошел, особенно после того как я прикрутил к нему один из шаблонов от webgen, но возникла интересная ситуация - при переносе с оффтопика на лиункс(да, я вернулся на линукс) работать оно отказалось. о причинах мне судить трудно, потому что питона я незнаю, однако это не помешало мне внаглую полезть ковырятся в нем. итак, изначально ошибка была такая:
Код: Выделить всё
# updateSite.py site.config
/usr/lib/python2.6/site-packages/pubtal/SitePublisher.py:37: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import time, codecs, os, os.path, md5
Traceback (most recent call last):
File "/usr/bin/updateSite.py", line 47, in <module>
from pubtal import SitePublisher, SiteConfiguration, SiteUtils
File "/usr/lib/python2.6/site-packages/pubtal/SitePublisher.py", line 39, in <module>
from simpletal import simpleTAL, simpleTALES, simpleTALUtils
File "/usr/lib/python2.6/site-packages/simpletal/simpleTAL.py", line 41, in <module>
from . import FixedHTMLParser, sgmlentitynames
File "/usr/lib/python2.6/site-packages/simpletal/FixedHTMLParser.py", line 38, in <module>
import html.parser
ImportError: No module named html.parser
ошбка выглядела недвусмысленно и я легко нагуглил тот факт что:
Note The HTMLParser module has been renamed to html.parser in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0.
другое дело что как на оффтопике так и на gentoo у меня питон второй ветки. одновременно с этим на gentoo установлен питон и третьей ветки, но все модули судя по всему старые.
в файле: /usr/lib/python2.6/site-packages/simpletal/FixedHTMLParser.py я обнаружил вот такую конструкцию:
Код: Выделить всё
import simpletal
import html.parser
class HTMLParser (html.parser.HTMLParser):
def unescape(self, s):
# Just return the data - we don't partially unescaped data!
return s
что явно небыло похоже на пример отсюда:
http://docs.python.org/library/htmlpars ... pplication
тогда я сделал по аналогии, получилось вот так:
Код: Выделить всё
import simpletal
from HTMLParser import HTMLParser
class HTMLParser (HTMLParser):
def unescape(self, s):
# Just return the data - we don't partially unescaped data!
return s
и вылетело с совершенно новой ошибкой:
Код: Выделить всё
# updateSite.py site.config
/usr/lib/python2.6/site-packages/pubtal/SitePublisher.py:37: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import time, codecs, os, os.path, md5
Support for content types: Binary, HTMLText, Raw, OpenOffice, Weblog, Catalogue
Building whole site.
(0 %) Publishing 1.txt
ERROR: Page Publication failed: Found non-unicode string in Context!
Exception bsddb.db.DBError: DBError('BSDDB object has already been closed',) in <bound method MD5File.__del__ of <pubtal.SitePublisher.MD5File instance at 0x8d2b64c>> ignored
что интересно, тот же файл, но с латиницей он охотно сьедает, хотя и в кириличном варианте достоверно юникод, я проверил это прогнав файл через iconv сначала в koi8-r из юникода и потом в обратном направлении, в юникод. все лишнее должно было по пути потеряться.
также, интересно, что метод unescape в современном описании интерфейса класса не документирован. еще интереснее то, что в примере, в документации к нему, он(класс, не метод) вызывается по старому имени. может недопиленая документация?
наверное в варианте питона под винду, модули были из третьей ветки, а метод присутствовал в недокументированном виде, иначе как это могло работать?
может мне нужно поставить новую версию этого модуля и вернуть в коде все как было? я вообще не представляю как это сделать, в портежах я ничего похожего не нашел, может здесь есть питоноводы и они в курсе? подозреваю что в питоне есть какая-то своя система установки модулей, наподобие cpan в перле?