Найти - Пользователи
Полная версия: Использование py2exe: заморочки и лазейки!
Начало » Python для экспертов » Использование py2exe: заморочки и лазейки!
1 2 3 4 5
proDiva
Метод подложки unicows.dll в каталог exe-шника сработал! Всем огромное спасибо, проблема с вин98 решена! Где пометить, что тема закрыта? ;)
bialix
OlDer
bialix
Те операции в питоне. которые используют unicode (например, в модуле os), не работают нормально на 98, потому что сам питон не использует unicows.dll ни в какой форме.
Интересно. Не знал. А есть где почитать об этом? Я что-то не нашел нигде информации об этом. На http://www.python.org/download/windows/ и win95 и 98 есть в списке поддерживаемых платформ, и нигде не написано об каких-либо ограничениях.
Я тоже о многом не знал, пока не начал делать порт bzr на win98. Кое-что юникодовое работает, кое-что нет.
Хуже всего, что не работает получение списка файлов в каталоге в виде unicode, т.е. os.listdir(u'.') на 98й дает все равно имена в ANSI кодировке. Я думаю из-за этого shutil.rmtree(u'dir') падает с ошибками если в дереве файлов есть не-ascii.

Вобщем скачал я себе исходники питона, читаю их, чтобы понять где и как. Поддержка unicode чаще всего просто зарубана проверкой номера версии винды. Если винда 98, то никаких попыток использовать unicows.dll даже не предполагается. Поиском в инете нашел старую дискуссию в comp.lang.python про эту либу и про то, что ее лицензия не позволяет ее распространять в составе дистрибутива питона, потому что у питона слишком свободная лицензия.

Пока что думаю, что делать с os.listdir(u'.').

Конечно, если не юзать доступ к файловой системе через unicode то наверное почти все будет работать.
Однако для bzr это неприемлемо.
Mkdir
proDiva
Метод подложки unicows.dll в каталог exe-шника сработал! Всем огромное спасибо, проблема с вин98 решена!
Классно! Поздравляю.
Я тут с интересом наблюдал за развитием темы ;)
Рад что все закончилось благополучно.
bialix
proDiva
Метод подложки unicows.dll в каталог exe-шника сработал! Всем огромное спасибо, проблема с вин98 решена! Где пометить, что тема закрыта? ;)
Уже пометили. Хорошо бы это дело пометить в wiki проекта py2exe в подразделе, посвященном wxPython.
OlDer
bialix
Я тоже о многом не знал, пока не начал делать порт bzr на win98. Кое-что юникодовое работает, кое-что нет.
Хуже всего, что не работает получение списка файлов в каталоге в виде unicode, т.е. os.listdir(u'.') на 98й дает все равно имена в ANSI кодировке. Я думаю из-за этого shutil.rmtree(u'dir') падает с ошибками если в дереве файлов есть не-ascii.
Тут, опять же unicows не при чем. На 98 и NT-подобных разные кодировки имен файлов. Нужно использовать sys.getfilesystemencoding( )
bialix
OlDer
bialix
Я тоже о многом не знал, пока не начал делать порт bzr на win98. Кое-что юникодовое работает, кое-что нет.
Хуже всего, что не работает получение списка файлов в каталоге в виде unicode, т.е. os.listdir(u'.') на 98й дает все равно имена в ANSI кодировке. Я думаю из-за этого shutil.rmtree(u'dir') падает с ошибками если в дереве файлов есть не-ascii.
Тут, опять же unicows не при чем. На 98 и NT-подобных разные кодировки имен файлов. Нужно использовать sys.getfilesystemencoding( )
Не-а. Причем, еще как причем.
Я могу создать директорию или файл с юникодным именем. И в этом мне ничего не помешает.
А вот чтобы получить содержимое директории я могу использовать либо ANSI функци, либо Unicode.
Так вот в исходниках питона использование юникодного апи по большей части отключено простой проверкой номера версии винды в рантайм.
bialix
OlDer
Тут, опять же unicows не при чем. На 98 и NT-подобных разные кодировки имен файлов. Нужно использовать sys.getfilesystemencoding( )
Завтра проверю на живой win98. А вот что я вижу в исходниках:

#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
const char *Py_FileSystemDefaultEncoding = “mbcs”;

именно эта константа возвращается функцией sys.getfilesystemencoding().
bialix
bialix
OlDer
Тут, опять же unicows не при чем. На 98 и NT-подобных разные кодировки имен файлов. Нужно использовать sys.getfilesystemencoding( )
Завтра проверю на живой win98. А вот что я вижу в исходниках:

#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
const char *Py_FileSystemDefaultEncoding = “mbcs”;

именно эта константа возвращается функцией sys.getfilesystemencoding().
Проверил. Действительно возвращает mbcs.
balu
proDiva
Если бы я была ГУРУ в питоне, я бы так и сделала))) но увы… Чайник - мое второе имя)))
Ну и? мЫ все чего-то не знаем. Значит надо стараться не біть чайниками ;) Знаешь какой-нибудь компилируемый язык или может знакома с бесплатными инсталяторами? Просто устанавливай последовательно питошу, и что там тебе дальше надо с родных инсталяторов. Хотя под тем же линухом все это на много проще…
OlDer
bialix
Проверил. Действительно возвращает mbcs.
На всякий случай, если кто еще не видел - вот здесь коротко изложено как в python работать с unicode.
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