2009-12-26 35 views
0

我只注意到我不能再使用Python 2.6 dll。 Python 2.5工作得很好。不能再使用Python 2.6的C接口,但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阿爾法DLL嘗試這樣做,它似乎工作,所以它可能是一個2.6的問題。
  2. 在Ubuntu x64上用Python 2.7 alpha嘗試了這個,它沒有出現分段錯誤。
+1

這是什麼意思? – prestomation 2009-12-26 08:19:00

+0

你似乎將「作品」與「當我做出奇怪的事情時不會發生段錯誤」混爲一談;你需要告訴我們你想要完成的實際任務。如果你這樣呈現你的代碼會有幫助:這是一個腳本,它是用Python 2.5運行的,包含硬編碼的「25」和「2.5」;它在用Python 2.5運行時「起作用」。將上述所有變爲適當的25或2.6,並且「不起作用」。更好的是:一個腳本獲取當前版本號(如果需要的話還有平臺),並且在沒有對版本號進行硬編碼的情況下做你想做的事情。 – 2009-12-26 13:05:43

回答

1

那麼,我懷疑你能做的就是負載 2.5和在同一進程2.6 ...是否ctypes.cdll.python26.Py_Initialize()單獨工作?

編輯:等待,你是否試圖從Python本身加載Python DLL?問心無愧?

2

你在做什麼是錯誤的。你清楚地運行Python 2.6,然後嘗試在相同的進程(和線程)中初始化共享庫,這將會崩潰(如果你是幸運的話......如果你不是這會導致你非常難看的麻煩後來)。您永遠不應該嘗試將Python加載到自身中並調用Py_Initialize。

相關問題