无法再使用Python 2.6 C接口,但2.5可以

-1 投票
2 回答
640 浏览
提问于 2025-04-15 17:22

我刚发现我不能再使用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的测试版dll,结果好像可以用,所以可能是2.6的问题。
  2. 我在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。

撰写回答