2009-12-26 53 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。

相关问题