Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Extending Python With C

Extending Python With C 7 Χρόνια 5 Μήνες πριν #4531

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Παιδιά προσπαθώ να βγάλω μια άκρη.

Προσπάθησα να φτιάξω ένα module σε C και να το κάνω compile έτσι ώστε να τρέχει σε python.

C Source Code:
#include <Python.h>
 
int show(char *msg)
{
	int i = 0;
 
	while (msg[i] != '\0'){
 
		printf("%c", msg[i]);
 
		i++;
	}
 
	return i;
}
 
 
static PyObject *show_wrapper(PyObject* self, PyObject* args)
{
	char *msg;
 
	if ( !PyArg_ParseTuple(args, "s", &msg) ){
		return NULL;
	}
 
	return Py_BuildValue("i", show(msg) );
}
 
 
static PyMethodDef myMethods[] = 
{
	{"sh", show_wrapper, METH_VARARGS, "Print a message."},
	{NULL, NULL, 0, NULL}
};
 
PyMODINIT_FUNC initshow(void)
{
	(void) Py_InitModule("show", myMethods);
}

Setup.py Code:
from distutils.core import setup, Extension
 
module = Extension(
    "show",
    sources = ['showmodule.c']
    )
 
setup(
    name = "Show Package",
    version = "1.0",
    description = "Description",
    ext_modules = [module]
    )
 

Προσπάθησα να εκτελέσω:
python setup.py build --compiler=mingw32
αλλά δεν δούλευε με python 3.6 . Τελικά έψαξα και βρήκα ότι για να κάνεις build ένα python extension module πρέπει να το κάνεις με python2.

Τελικά το έκανα με python2 και έγινε μια χαρά. Το θέμα είναι ότι το module show γίνεται κανονικά import από python 2 και δουελέυει κανονικά ως εξής:
import show
 
show.sh("Hello World")

αλλά σε python 3.6 δεν δουλεύει, με λέει ότι:
ImportError: DLL load failed: The specified module could not be found.

Το έψαξα και βρήκα ότι αυτό συμβαίνει διότι το module extension έχει γίνει compile για να δουλεύει σε 32 bits ενώ η python 3.6 είναι σε 64.

Επίσης είδα ότι σε unix συστήματα το module έχει την κατάληξη .so ενώ σε windows .pyd .

Δηλαδή, κάθε φορά που κάνω ένα extesional module θα πρέπει να το κάνω compile για linux και για windows και επιπλέον σε 32 ή 64 bits και ο κάθε ένας θα πρέπει να έχει αυτό που υποστηρίζει;

Πως δηλαδή μετά θα φτιάξω ένα πρόγραμμα σε python που θα κάνει import αυτό το module που έφτιαξα και θα τρέχει και σε linux και σε windows αλλά και σε 32 ή 64 bits.
Τελευταία διόρθωση: 7 Χρόνια 5 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Extending Python With C 7 Χρόνια 5 Μήνες πριν #4536

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Δεν έχω ασχοληθεί καθόλου με το θέμα έτυχε όμως να διαβάσω στο
Programming Python 4th edition Mark Lutz
ότι υπάρχουν προγράμματα που κάνουν εύκολα τη δουλεία του extension
Αυτός έχει μια λίστα και αναλύει το swing
Από ότι έχω καταλάβει το c ή c++ αρχείο το αφήνεις ως έχει αυθέντικό και κάνεις μετά ένα αρχείο extra που θα κάνει όλη τη δουλειά

Στη λίστα του είναι επίσης το sip που από την περίληψη που έχει καταλαβαίνω ότι είναι πιο απλό και βασίζεται στο swing

Αν δεν βρεις άλλη λύση ψάξτο
pypi.python.org/pypi/SIP/4.19.2
Τελευταία διόρθωση: 7 Χρόνια 5 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Extending Python With C 7 Χρόνια 5 Μήνες πριν #4541

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Theo έγραψε:
Δεν έχω ασχοληθεί καθόλου με το θέμα έτυχε όμως να διαβάσω στο
Programming Python 4th edition Mark Lutz
ότι υπάρχουν προγράμματα που κάνουν εύκολα τη δουλεία του extension
Αυτός έχει μια λίστα και αναλύει το swing
Από ότι έχω καταλάβει το c ή c++ αρχείο το αφήνεις ως έχει αυθέντικό και κάνεις μετά ένα αρχείο extra που θα κάνει όλη τη δουλειά

Στη λίστα του είναι επίσης το sip που από την περίληψη που έχει καταλαβαίνω ότι είναι πιο απλό και βασίζεται στο swing

Αν δεν βρεις άλλη λύση ψάξτο
pypi.python.org/pypi/SIP/4.19.2

Θα το τσεκάρω, ευχαριστώ :laugh:
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.411 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου