2009-12-26 5 views
0

Je viens de remarquer que je ne peux plus utiliser la DLL Python 2.6. Python 2.5 fonctionne très bien.Impossible d'utiliser l'interface Python 2.6 C plus, mais fonctionne 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 

Est-ce que je fais quelque chose de mal ou est-ce que Python 2.6 est cassé?

Mise à jour

  1. fait l'essai avec la dll alpha Python 2.7 et il semble fonctionner, il peut y avoir un problème 2.6.
  2. J'ai essayé ceci sur Ubuntu x64 avec Python 2.7 alpha et cela a fonctionné sans erreur de segmentation.
+1

À quoi cela sert-il? – prestomation

+0

Vous semblez confondre "œuvres" avec "ne pas segfault quand je fais quelque chose de bizarre"; vous devez nous dire quelle tâche pratique vous essayez d'accomplir. Il serait utile si vous présentez votre code comme ceci: Voici un script qui doit être exécuté avec Python 2.5 et contient "25" et "2.5" codé en dur; il "fonctionne" lorsqu'il est exécuté avec Python 2.5. Remplacez tout ce qui précède par 25 ou 2.6 selon le cas et cela «ne fonctionne pas». Encore mieux: un script qui obtient le numéro de version actuel (et la plate-forme si nécessaire) et fait ce que vous voulez sans numéros de version en dur. –

Répondre

1

Eh bien, ce que je doute que vous pouvez faire est de charger à la fois 2,5 et 2,6 dans le même processus ... Est-ce que ctypes.cdll.python26.Py_Initialize() le travail seul?

EDIT: attendez, essayez-vous de charger la DLL Python à l'intérieur de Python? wth?

2

Ce que vous faites est faux. Vous exécutez clairement Python 2.6 et essayez ensuite d'initialiser la bibliothèque partagée dans le même processus (et thread), ce qui va planter (si vous êtes chanceux ... si vous n'êtes pas ça va vous causer des ennuis très laids plus tard). Vous ne devriez jamais, jamais, essayer de charger Python dans lui-même et appeler Py_Initialize.