无法再使用Python 2.6 C接口,但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有问题?
更新
- 我试了试Python 2.7的测试版dll,结果好像可以用,所以可能是2.6的问题。
- 我在Ubuntu x64上用Python 2.7的测试版试了,结果没有出现分段错误。
2 个回答
1
我怀疑你能不能在同一个程序里同时加载2.5和2.6版本的Python……你试过单独用ctypes.cdll.python26.Py_Initialize()吗?这样能行吗?
补充一下:等等,你是想从Python里面加载Python的DLL文件吗?这是什么操作啊?
2
你现在做的事情是错误的。你显然是在运行 Python 2.6,然后试图在同一个进程(和线程)中初始化共享库,这样会导致崩溃(如果你运气好……如果运气不好,后面会遇到很麻烦的问题)。你绝对不应该尝试把 Python 加载到自己里面并调用 Py_Initialize。