Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#76: 2009-07-21 08:36:23 ЛС | профиль | цитата
Что-то я совсем запутался

С одной стороны, 3.1 - это будущее питона, и как бы надо на него ориентироваться. С другой, народ как-то не спешит на 3.1 переходить, и (возможно) кое-какие пакеты с 3.1 не совместимы (а подкрутить, зачастую, и некому).

Версия же 2.6 более изучена, большинство библиотек (пакетов) как раз и расчитаны на неё. Но - проблемы с кодировкой жуткие.

Вариант "и рыбку съесть, и на ёлку влезть" не пройдёт - версия 3.1 не имеет обратной совместимости.

Обе версии считаются "стабильными":
http://python.org писал(а):

The current production versions are Python 2.6.2 and Python 3.1. <...> Note that both Python 2.6 and 3.1 are considered stable production releases, but if you don't know which version to use, start with Python 2.6 since more existing third party software is compatible with Python 2 than Python 3 right now.


вольный перевод:

В настоящее время основными являются версии Python 2.6.2 и Python 3.1. Заметим, что и Python 2.6, и 3.1 являются стабильнми релизами, но если вы не знаете, какую версию использовать, начните с Python 2.6, поскольку большинство существующих продуктов сторонних производителей совместимы с 2.х, чем с 3.х


Сейчас я собираюсь "прогуляться" по сайтам, где водятся питонщики, и потрясти их на предмет кодировок в 2.6. Уже есть первые результаты (из ЖЖ-сообщества ru_python), надо их только протестировать.

Таким образом, пока не найдётся лучший выход, имеется два пути: либо остаться на 3.1 (плюс: одна кодировка UTF-8 для всех, минус: слабая история наступания на грабли), либо откатиться на 2.6 (плюс: почти все грабли известны, минус: для каждой платформы придётся перекодировать файл). Если кто-то желает высказать здесь своё мнение - готов выслушать.
------------ Дoбавленo в 08.38:
Update: для понимающих по-ихнему [burl=http://www.reddit.com/r/programming/comments/8yemu/hey_proggit_python_31_is_out_but_im_still_using/]ссылка[/burl]
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#77: 2009-07-21 08:54:19 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2021-05-21 10:45:06
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#78: 2009-07-21 08:56:57 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2022-04-03 07:56:41
карма: 0

0
Ответов: 5446
Рейтинг: 323
#79: 2009-07-21 20:16:31 ЛС | профиль | цитата
94.45.190.222, можно-то можно, только дюже трудоёмко - на половину методов придётся вторую копию заводить... Вот если бы помощника... (мечтательный смайлик)
------------ Дoбавленo в 20.25:
Но, в принципе, идея стоящая.
карма: 1

0
Ответов: 1304
Рейтинг: 405
#80: 2009-07-21 21:29:12 ЛС | профиль | цитата
iarspider писал(а):
Версия же 2.6 более изучена, большинство библиотек (пакетов) как раз и расчитаны на неё

Для меня (осознанный) выбор однозначен -- 2.6.2, так как основной пакет(PyOpenGL-3.0) для OpenGL, с Python 3.1 практически не совместим, то-же можно сказать о OpenGLContext-2.1.0a2 и PIL-1.1.6.win32.

карма: 3

0
Ответов: 5446
Рейтинг: 323
#81: 2009-07-22 00:24:20 ЛС | профиль | цитата
MAV, учту.


Провёл ряд экспериментов с кодировками в Python 2.6.2/Windows 7. Получается так: 2.6.2 и UTF-8 дружат, если строковые литералы корректно записывать:

# -*- coding: UTF-8 -*-
name = "Вася" #неверно
name = u"Вася" #верно
Это не сложно сделать.

Куда интереснее ситуация с чтением/записью файла.

Чтение и вывод в консоль:

# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла -*-")
file = open("fixes.txt", "r")
buffer = file.read()

print unicode(buffer, "cp1251") #верно
print buffer #неверно

Чтение и форматирование:

#! /usr/bin/python
# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла и форматирования -*-")
file = open("user.txt", "r")
buffer = file.read()
newbuffer = unicode(buffer, "cp1251")
#str1 = (u"Здесь был {0}").format(buffer)
str2 = (u"Здесь был {0}").format(newbuffer)

print(u"Считано:")
print(buffer)
#print(str1)
print(u"Декодировано:")
print(newbuffer)
print(str2)
(закомментированные строки дают exception)

Чтение, форматирование, запись:

#! /usr/bin/python
# -*- coding: UTF-8 -*-
print(u"-*- Проверка чтения из файла, форматирования и записи -*-")
file = open("user.txt", "r")
buffer = file.read()
newbuffer = unicode(buffer, "cp1251")
str2 = (u"Здесь был {0}").format(newbuffer)

print(u"Декодировано:")
print(newbuffer)
print(str2)

file2 = open("hello.txt", "w")
file2.write(str2.encode("cp1251"))
Вот что с этим делать - непонятно. Мне бы не хотелось постоянно за собой таскать хвост из перекодировок (это напрочь убьёт читаемость кода).

карма: 1

0
Ответов: 5446
Рейтинг: 323
#82: 2009-07-23 20:44:38 ЛС | профиль | цитата
А вот во что превращается (после минимального облагораживания) пример HelloUser.py:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
#-----------------------------------------------------
# HelloUser.py
#-----------------------------------------------------

import string
# Global vars

# Functions
def setenc():
import platform
global term_enc
term_enc = 'utf-8' if platform.uname()[0] == 'Linux' else 'cp866'

def myinput(prompt=u""):
global term_enc
return unicode(raw_input(prompt.encode(term_enc)),term_enc)

# Program body
if __name__ == "__main__":
term_enc = ""
setenc()
s11 = ""
res8 = (u"* Привет, {0}! *").format(myinput(u"Как тебя зовут? "))

memory3 = len(res8)
for line in range(0, 5, 1):
switch_5 = line
if (switch_5 == 0):
for counter6 in range(0, memory3, 1):
s11 = (str(s11) + u"*")
print(s11)
elif (switch_5 == 1):
res18 = u"*{0}*".format((s11[1:-1]).replace(u"*",u" "))
print(res18)
elif (switch_5 == 2):
print(res8)
elif (switch_5 == 3):
print(res18)
elif (switch_5 == 4):
print(s11)


# Created with HiAsm Studio 4.2 build 179 (http://www.hiasm.com)

Замечу - код одинаково хорошо работает и под Windows 7, и под Ubuntu 9.04, без каких-либо дополнительных манипуляций с кодировками! Собственно, осталось только написать свои обёртки для file.read и file.write (а вот тут будет ручной выбор кодировки - мало ли кому что понадобится...), да переделать компоненты обратно под 2.6. И тогда можно будет первую фазу работ по пакету (обёртка базовых методов) считать завершённой, и приступать к клепанию GUI
карма: 1

0
Ответов: 1304
Рейтинг: 405
#83: 2009-07-23 22:32:47 ЛС | профиль | цитата
iarspider,и всё таки кодировки пали под напором интеллекта , представляю сколько было убито человеко-часов и съедено трафика! Приведённый метод так же хорошо работает и в XP.
карма: 3

0
Ответов: 5446
Рейтинг: 323
#84: 2009-07-23 23:14:09 ЛС | профиль | цитата
MAV, немало часов (и не только моих), но не так уж много трафика (благо за него буржуины платят ). Большая часть кода взята из ответов в ЖЖ-сообществе ru_python, мне оставалось только собрать воедино несколько методов (unicode/encode, u"xxx", platform.uname). На днях выложу очередную сборку пакета под 2.6 с побеждёнными кодировками.
------------ Дoбавленo в 02.01:
(удалено по причине выхода новой версии) 1я пересборка hiPython под 2.6.2. Пока не буду уверен, что я ничего не сломал в этой собрке - не займусь GUI.
карма: 1

0
Ответов: 5446
Рейтинг: 323
#85: 2009-07-25 01:53:26 ЛС | профиль | цитата
Небольшое обновление пакета:
- Исправлена опечатка в FileObject.ini
+ Новый компонент: Encoding (перекодировка строки xxx <-> UTF-8).
* Смена "идеологии" работы с файлами: перекодировка строк при чтении/записи теперь на совести разработчика (в связи с этим "похудел" EntryPoint).

Пока планирую набросать 1-2 примера (в основном - на чтение/запись/перекодировку), потом залью на SVN (ежели Dilma не запретит).
------------ Дoбавленo в 02.02:
Почистил тему от старых релизов и поправил шапку
карма: 1

0
Ответов: 1304
Рейтинг: 405
#86: 2009-07-25 18:53:48 ЛС | профиль | цитата
iarspider, какой версией PyCode необходимо воспользоваться от 13 июля или профиксенной от 18-го числа ?
карма: 3

0
Ответов: 5446
Рейтинг: 323
#87: 2009-07-25 21:08:30 ЛС | профиль | цитата
MAV, пофиксенной от 18-го. Спасибо что напомнил, архив перезалью.
карма: 1

0
Ответов: 5446
Рейтинг: 323
#88: 2009-07-27 19:58:07 ЛС | профиль | цитата
Релиз от 27 июля. Поправлен hiEntryPoint (недокументированная особенность кодогенератора - одинарные и двойные кавычки несут разный смысл в контексте println). Обновлена шапка темы (ссылка на компилятор).
карма: 1

0
Ответов: 1304
Рейтинг: 405
#89: 2009-07-27 21:54:23 ЛС | профиль | цитата
iarspider, спасибо за новый релиз (что-то вспомнились пирожки) . С предыдущим у меня получилась непонятная заморочка, а по сему отпишусь для тех кто участвует в тестировании. При переходе на новый релиз от 27 июля(с PyCode); необходимо удалить папку HiAsm, распаковать резервную копию и далее произвести установку в соответствии с рекомендациями в начале темы. PyCode.exe поместить в директорию HiAsmcompiler. Данный способ необходимо применять только в случае с проблемами при компиляции проекта.
Успел проверить примерно 50% элементов, споткнулся на двух, далее пример.
ps: FileTools, DirTools, аналагично что и FilePart.


карма: 3

0
файлы: 1test.rar [1.2KB] [254]
Ответов: 5446
Рейтинг: 323
#90: 2009-07-28 00:15:22 ЛС | профиль | цитата
MAV, мне тоже вспомнились пирожки. Но такова моя натура - вечно спешу, и ничего с собой поделать не могу.

По ошибкам:
"Case" - triaged&fixed (тобишь найдена и обезврежена)
"FilePart", "FileTools", "DirTools" - triaged&fixed

Последняя - свежее проявление тонкого различия между 'abc' и "abc" для кодогенератора.

------------ Дoбавленo в 00.18:
P.S. Если кто не понял - пофиксенные элементы в прищепке.
карма: 1

0
файлы: 1fix_20090727.zip [6.3KB] [271]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)