Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost.python 
:(
    Опции темы
boostcoder
Дата 28.4.2012, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



не вкурсе.
мало работал с встраиванием пайтоновского интерпретатора в С/С++
PM WWW   Вверх
mrgloom
Дата 28.5.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Код

void  call_simple_python_func()
{
    Py_Initialize();
    static const char *program = ""   
    "import sys\n"
    "import sys.path\n";
    PyRun_SimpleString(program); 
    Py_Finalize();
}


пробую минимальный код, пишет что нет модуля path ("no module named path")
причем из интерпретатора все работает.

Добавлено через 14 минут и 19 секунд
причем так работает

Код

void  call_simple_python_func()
{
    Py_Initialize();
    static const char *program = "" 
    "import sys\n"
    "from sys import path\n"
    "print sys.path\n";
    PyRun_SimpleString(program); 
    Py_Finalize();
}



но при попытке импортировать socket пишет, пишет что нету _socket.

Код

void  call_simple_python_func()
{
    Py_Initialize();
    static const char *program = ""   
    "import socket\n";  
    PyRun_SimpleString(program); 
    Py_Finalize();
}

PM MAIL   Вверх
boostcoder
Дата 28.5.2012, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



по идее, это должно помочь: http://docs.python.org/c-api/init.html#Py_SetPythonHome
PM WWW   Вверх
mrgloom
Дата 28.5.2012, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



попробовал указать в Py_SetPythonHome папку со скриптами, там же где лежит солюшн, и ничего.

вообщем проблема как тут
http://www.linuxquestions.org/questions/pr...et-mess-699794/
http://bytes.com/topic/python/answers/8031...d-python-script
только переустановка мне не помогла.

что интересно, я заметил, что не находит _socket даже, если положить в папку со скриптами python.exe python27.dll и папку Lib, т.е. что то с путями всё таки скорее всего.

так же пробовал кидать _socket.pyd куда угодно, не находит.

полезный документ нашел
https://www6.software.ibm.com/developerwork...nscript-ltr.pdf

Это сообщение отредактировал(а) mrgloom - 28.5.2012, 15:57
PM MAIL   Вверх
boostcoder
Дата 28.5.2012, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



это все же не раздел по пайтон девелопмингу. лучше подобные специфичные вещи спрашивать в списке рассылки конкретного проенкта.
но, т.к. ты юзаешь boost.python, спроси в списке рассылки [email protected].
PM WWW   Вверх
mrgloom
Дата 28.5.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



это я в начале хотел использовать, а сейчас пользуюсь встроенными питоновскими как в pdf выше,  только проблема с _socket осталась.
скорее всего потому что _socket.pyd лежит не в Lib,а в Dlls.
PM MAIL   Вверх
boostcoder
Дата 28.5.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mrgloom @  28.5.2012,  16:07 Найти цитируемый пост)
пользуюсь встроенными питоновскими как в pdf

а зачем эта pdf`ка если в оффю доке написано тоже самое? ;)
к тому же, этой теме тем более не место в этом разделе. пиши девелоперам.

PM WWW   Вверх
mrgloom
Дата 28.5.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



ну вообщем я продолжу поиски решения или обходные пути.



кстати с помощью Py2exe из скрипта я так понимаю можно сделать dll, но как потом к ней обращаться?(особенно если есть входные параметры и выходные)
PM MAIL   Вверх
boostcoder
Дата 28.5.2012, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



слушай.. а какая цель у твоей задачи? писать на пайтон и прикидываться нативной? smile 
PM WWW   Вверх
mrgloom
Дата 29.5.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



у меня есть код на питоне(который я не хочу переписывать на с++) и есть приложение на с++ в которое я хочу встроить данный функционал.
вообщем мне надо из с++ кода вызывать python код, не просто запускать скрипт, а написать как бы обертки для функций на питоне+чтобы можно было подавать и возвращать параметры.

в pdf вроде даже написано как вызывать метод класса, я до этого просто функции пробовал.
причем в release даже вроде работает(хотя может просто не пишет ошибку), а в дебаге я застрял с этим import socket.
попробую еще python portable может прокатит.
PM MAIL   Вверх
mrgloom
Дата 29.5.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет




вроде бы решение  -E флаг для GCC, но какой аналог для линкера студии?
если важно, я линкую статически.

Цитата

http://mail.python.org/pipermail/python-li...uly/624618.html
http://mail.python.org/pipermail/python-li...ust/099835.html
The problem is that the linker has stripped out all the symbols from
your executable, apart from the ones you actually use. When Python
dlopen()s _socket.so, it tries to reference a symbol that has been
stripped. The solution is to tell your linker not to strip the
symbols. With GNU ld, for example, the option is --export-dynamic.


PM MAIL   Вверх
boostcoder
Дата 29.5.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mrgloom @  29.5.2012,  11:30 Найти цитируемый пост)
-E флаг для GCC

этот флаг, говорит gcc запуститься в режиме препроцессора-only. так что непонятно, какое это имеет отношение к проблеме)
PM WWW   Вверх
mrgloom
Дата 29.5.2012, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



похоже, то что выше относится к этому.
Цитата

Linking Requirements
While the configure script shipped with the Python sources will correctly build Python to export the symbols needed by dynamically linked extensions, this is not automatically inherited by applications which embed the Python library statically, at least on Unix. This is an issue when the application is linked to the static runtime library (libpython.a) and needs to load dynamic extensions (implemented as .so files).

The problem is that some entry points are defined by the Python runtime solely for extension modules to use. If the embedding application does not use any of these entry points, some linkers will not include those entries in the symbol table of the finished executable. Some additional options are needed to inform the linker not to remove these symbols.

Determining the right options to use for any given platform can be quite difficult, but fortunately the Python configuration already has those values. To retrieve them from an installed Python interpreter, start an interactive interpreter and have a short session like this:

>>> import distutils.sysconfig
>>> distutils.sysconfig.get_config_var('LINKFORSHARED')
'-Xlinker -export-dynamic'
The contents of the string presented will be the options that should be used. If the string is empty, there’s no need to add any additional options. The LINKFORSHARED definition corresponds to the variable of the same name in Python’s top-level Makefile.

http://docs.python.org/extending/embedding...ng-requirements


хотя я не очень себе представляю как там эта линковка происходит, тем более что тут описывается для линукса, и во всяком случае
distutils.sysconfig.get_config_var('LINKFORSHARED')
мне не выдал ни одного флага.
PM MAIL   Вверх
boostcoder
Дата 29.5.2012, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mrgloom @  29.5.2012,  15:25 Найти цитируемый пост)
то что выше относится к этому

что к чему относится? препроцессор к клинковке?
PM WWW   Вверх
mrgloom
Дата 29.5.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



может вы не так поняли(ну или я ), там скорее
Цитата

-export-dynamic 

по описанию делает
Цитата

This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of dlopen or to allow obtaining backtraces from within a program. 


вот наверно надо найти аналог для линкера VS.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.