Больше не могу использовать интерфейс Python 2.6 C, но 2.5 работает - PullRequest
0 голосов
/ 26 декабря 2009

Я только что заметил, что больше не могу использовать dll Python 2.6. Python 2.5 работает просто отлично.

import ctypes

py1 = ctypes.cdll.python25
py2 = ctypes.cdll.python26
# ctypes.cdll.LoadLibrary("libpython2.6.so") in linux

py1.Py_Initialize()
py2.Py_Initialize() 
# segmentation fault in Linux

py1.PyRun_SimpleString("print 'hello world'")
# this works because it is using python 2.5
py2.PyRun_SimpleString("print 'hello world2'") 
# WindowsError: exception: access violation reading 0x00000004

Я что-то не так делаю или Python 2.6 сломан?

Обновление

  1. Пробовал это с Python 2.7 alpha dll, и он, кажется, работает, так что это может быть проблема 2.6.
  2. Попробовал это на Ubuntu x64 с Python 2.7 alpha, и он работал без ошибки сегментации.

Ответы [ 2 ]

2 голосов
/ 26 декабря 2009

То, что вы делаете, неправильно. Вы явно запускаете Python 2.6 и затем пытаетесь инициализировать разделяемую библиотеку в том же процессе (и потоке), который может привести к сбою (если вам повезет ... если нет, это вызовет у вас очень неприятные проблемы потом). Никогда не пытайтесь загрузить Python в себя и вызвать Py_Initialize.

1 голос
/ 26 декабря 2009

Ну, я сомневаюсь, что вы можете сделать это загрузить оба 2.5 и 2.6 в одном процессе ... Работает ли только ctypes.cdll.python26.Py_Initialize ()?

РЕДАКТИРОВАТЬ: подождите, вы пытаетесь загрузить Python DLL изнутри самого Python? WTH?

...