Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2010 14:13:21

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Собрал Boost под Python 3.1 и решил сделать модуль
Вот C++ код:

#include <boost/python.hpp>

using namespace boost::python;

char const* greet()
{
return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
def("greet", greet);
}
При попытке вызвать модуль из питона вылетает ошибка:
Traceback (most recent call last):
File "<string>", line 247, in run_nodebug
File "test.py", line 1, in <module>
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 30-31: invalid data
Вот питоновский код вызова:
import hello_ext

print(hello_ext.greet())
Собственно что я делаю не так? Под Python 2.6 все отлично пашет :)



Офлайн

#2 Сен. 12, 2010 02:21:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost.Python под Python 3.1 проблема с юникодом

Собственно, все так. И оно работает.
Что поломалось у вас - не знаю.
Как понимаю, boost собирали сами. Что говорять тесты?
Хотя бы примитивный
cd ./libs/python/example/quickstart
bjam –verbose-test test



Офлайн

#3 Сен. 12, 2010 12:58:12

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Выполнил

Андрей Светлов
cd ./libs/python/example/quickstart
bjam –verbose-test test
Создался модуль extending.pyd, пробовал обратится к нему из питона, все отлично работает :D
Сделал копипаст extending.cpp в свой проект и все равно та же самая ошибка, наверно что то не так с настройками проекта в Visual Studio :/



Офлайн

#4 Сен. 12, 2010 13:10:12

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost.Python под Python 3.1 проблема с юникодом

bjam -d+2 -n test
не будет ничего запускать, зато покажет, с какими опциями компилировалось/линковалось.
В MSVC, насколько помню, можно было из менюшек настройки посмотреть получившиеся command line flags.
Сравните и найдите три отличия.



Офлайн

#5 Сен. 12, 2010 15:35:04

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Андрей Светлов
bjam -d+2 -n test
Не нашел там упоминания о файле extending.pyd, выполнил “bjam -n test” и там его отыскал :)
Подкорректировал линкер под линковку bjam, но это нечего не дало.. Перерыл все настройки проекта - все равно нечего.. Пробовал вставлять свой код в extending.cpp и скомпилить с помощью bjam - модуль работает. Уже не знаю что и менять :|

upd: Залил свой проект в аттач (в проект включены необходимые инклуды для Boost Python). Пожалуйста гляньте :rolleyes:



Отредактировано (Сен. 12, 2010 16:17:47)

Офлайн

#6 Сен. 12, 2010 16:20:27

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost.Python под Python 3.1 проблема с юникодом

Аттачи на этом форуме никогда не работали :)
Разница может быть в настройках компилятора, а не только линкера.
Первое, что приходит в голову - есть какой-то флажок касательно wchar_t.
Подробностей не помню.
Ваш проект мне ничего не даст - у меня linux, винды и студии нет, проверить не на чем.
Кстати, надеюсь вы используете VS 2008?



Офлайн

#7 Сен. 12, 2010 16:25:33

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Андрей Светлов
Аттачи на этом форуме никогда не работали :)
Я уже заметил что они не работают :)
Андрей Светлов
Кстати, надеюсь вы используете VS 2008?
Конечно 2008 :D
Андрей Светлов
Первое, что приходит в голову - есть какой-то флажок касательно wchar_t.
Буду что то подобное искать :P



Офлайн

#8 Сен. 12, 2010 17:06:18

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Ппц, слов нету.., проблема была настолько банальна - в пути к модулю были русские буквы :lol: :lol: :lol:
Андрей Светлов, спасибо что помогал с решением проблемы :)



Отредактировано (Сен. 12, 2010 17:06:40)

Офлайн

#9 Сен. 12, 2010 21:03:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Boost.Python под Python 3.1 проблема с юникодом

Заработало - хорошо.
Только, кажется, проблема идентифицированна неверно. Все должно было пройти и с русскими буквами. Я когда-то проверял.
Единственное, чего питон не умеет - это работать с pyd названным по русски.
И не научится, наверное, никогда - точка входа это функция init<имя модуля>; кодировка исключительно ascii - по другому С/С++ не поймет.
Русский путь к файлу .pyd отрабатывает нормально.



Офлайн

#10 Сен. 12, 2010 22:37:38

HexRx
От:
Зарегистрирован: 2010-09-10
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Boost.Python под Python 3.1 проблема с юникодом

Андрей Светлов, только что запустил модуль из англ папки - запустился, потом переименовал папку на русский - ошибка “UnicodeDecodeError: ‘utf8’ codec can't decode bytes in position 30-31: invalid data” =) Также работают и стандартные pyd.
Может быть такие проблемы только с виндой?



Отредактировано (Сен. 12, 2010 22:44:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version