J'essaye de mettre à niveau un petit module C pour travailler avec Python 3.x et avoir du mal à le compiler. Mon barrage routier en ce moment est que le préprocesseur définit que je suis supposé utiliser pour vérifier que la version de Python ne fonctionne pas.PY_MAJOR_VERSION indéfini lors de la compilation du module Python C pour Python 3.x
Le module contient deux fichiers .c pour le moment (j'ai temporairement mis en commentaire le reste). Dans les deux fichiers, PY_MAJOR_VERSION n'est pas défini, donc le compilateur ne peut pas utiliser les définitions spécifiques de Python 3.x si nécessaire.
mymodule.c:
#ifndef PY_MAJOR_VERSION
#error Major version not defined!
#endif
#if PY_MAJOR_VERSION >= 3
#define PY3K
#endif
#include "Python.h"
#include "myobj.h"
/* omitted: irrelevant boilerplate structs */
PyMODINIT_FUNC
initmymodule(void)
{
PyObject* m;
#ifdef PY3K
m = PyModule_Create(&mymodule_struct);
#else
(void) Py_InitModule("mymodule", MyModMethods);
m = Py_InitModule3("mymodule", NULL,
"My Module");
#endif
/* omitted: the rest of the module init code */
}
myobj.c:
#ifndef PY_MAJOR_VERSION
#error Major version not defined!
#endif
#if PY_MAJOR_VERSION >= 3
#define PY3K
#endif
#include "Python.h"
#define NEED_STATIC
#include "myobj.h"
#undef NEED_STATIC
#ifdef PY3K
#define PYSTR_FROMC PyUnicode_FromString
#define PYSTR_FORMAT PyUnicode_Format
#define PYINT_FROMC PyLong_FromLong
#else
#define PYSTR_FROMC PyString_FromString
#define PYSTR_FORMAT PyString_Format
#define PYINT_FROMC PyInt_FromLong
#endif
/* omitted: rest of module code */
setup.py:
from distutils.core import setup, Extension
module1 = Extension('mymodule', sources = ['mymodule.c', 'myobj.c'])
setup(name='mymodule', version='0.1', ext_modules=[module1])
Je construis avec c:\python31\python setup.py bdist_wininst
Où est PY_MAJOR_VERSION su mis en place pour se définir? Est-ce quelque chose que j'ai besoin de dire à distutils de passer au compilateur?
Je vais juste dire ça. Définir le test pourrait être très facile si vous utilisez un IDE comme VS2010. – Kabie
Vous devez sélectionner votre propre réponse en tant que réponse, de sorte que la question soit marquée comme réponse. –
Fait, merci. J'apprends encore un peu mon chemin autour de cet endroit. :) – cecilkorik