不能再使用Python 2.6 C接口,但2.5可以工作

时间:2009-12-26 03:30:45

标签: python ctypes python-2.6 python-2.5

我刚注意到我不能再使用Python 2.6 dll了。 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. 使用Python 2.7 alpha在Ubuntu x64上尝试过它,它没有出现分段错误。

2 个答案:

答案 0 :(得分:2)

你在做什么是错的。您显然正在运行Python 2.6,然后尝试在同一进程(和线程)中初始化共享库,这将崩溃(如果您很幸运...如果您不是它会导致您非常难看的麻烦后来)。你永远不应该尝试将Python加载到自身并调用Py_Initialize。

答案 1 :(得分:1)

嗯,我怀疑你可以做的是在同一个进程中加载​​两个 2.5和2.6 ... ctypes.cdll.python26.Py_Initialize()单独工作吗?

编辑:等等,你是否试图从Python内部加载Python DLL?相机连?