You are not logged in.

  • Login

1

Friday, August 17th 2007, 2:28pm

Python Embedding in C++

Hallo,
wie der Titel sagt hab ich vor Python in C++ (Konsolen-Anwendung) einzubinden (wenn man das so überstetzen kann). Also leg ich mir einfach C++-Projekt an und wie im Tutorial (http://www.python.org/doc/ext/embedding.html) inkludiere ich die Python.h (aus dem python-include-ordner c:\python25\include) wiefolgt:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include "c:\python25\include\Python.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
Py_Initialize();
PyRun_SimpleString("print \"hallo\"");
Py_Finalize();
return 0;
}


Und dann kommt da der Fehler:

Quoted

c:\dokumente und einstellungen\codework\eigene dateien\visual studio 2005\projects\python\python\pyconfig.h(189) : fatal error C1083: Datei (Include) kann nicht geöffnet werden: "basetsd.h": No such file or directory
Es ist nich schwer zu erraten was da falsch läuft. Nur wo bekomm ich die Header-Datei her?

Es wär cool wenn mir jemand sagen kann wieso die Datei nicht existiert und vielleicht auch wo ich die her krieg...

Danke im Vorraus.


PS: Ich benutzte VC++ 2005 EE. Und geGoog'elt hab ich schon.

2

Friday, August 17th 2007, 3:26pm

Hab was gefunden *gg* site:python.org basetsd.h "No such file or directory "

> http://mail.python.org/pipermail/python-…une/004737.html

Quoted

I've only skimmed your post briefly, but this is likely your problem. Python extensions cannot be built with Visual C++ 2005 (incompatible C runtime), so this doesn't work. You need the Visual C++ Toolkit Edition, but MS no longer seem to supply this :-( If you can get someone who has a copy to send it to you, that would be one option - but it's a 32MB file, and I don't know the redistribution conditions, it's probably not allowed, so you may have problems there).

The other option is to install Mingw (from www.mingw.org), and build using setup.py build --compiler=mingw32. This works fine, unless your extension code uses MSVC specific extensions. The instructions in the Python docs are a little out of date, I believe. With Python 2.4, you shouldn't need to do anything more than install mingw, make sure gcc is on your path, and run setup.py as above. You can even edit the distutils config file (I can't remember its location offhand, sorry) to specify that distutils should use mingw by default.

3

Friday, August 17th 2007, 3:42pm

Also wieder dieses blöde Microsoft....

Wenn ich das richtig verstehe Unterstützt der VC++ Compiler (2k5EE) Python Embedding nicht(?), aus welchem Grund auch immer.

Gibt's denn einen guten C++-Editor + Compiler (also wo man nich immer alles selbst compilieren muss)? Borland C++, vielleicht?

Schön'n dank an den der ein hat...!

This post has been edited 1 times, last edit by "neckcracker" (Aug 17th 2007, 3:48pm)


4

Friday, August 17th 2007, 4:02pm

Ich verstehe die Python-Usergroup-Diskussion nicht so ganz. Einen Beitrag weiter wird ihm VisualStudio empfohlen:
http://mail.python.org/pipermail/python-…une/004739.html

Quoted


I would recommend buying Visual Studio. It's what python 2.4 is built
with, and it makes compiling extensions nice and easy.


Wobei VisualStudio doch nur eine IDE ist, oder? Der Compiler müsste doch eigentlich der selbe sein.
Ich hab zwar auch mal damit gearbeitet, aber mich nie in die Menüs verirrt.

Ich glaube die beste Lösung ist Eclipse mit CDT Plugin als IDE und minigw oder GCC als Compiler.

5

Friday, August 17th 2007, 5:24pm

Hä? Da blick ich jetzte nich ganz durch... Ich habs satt mir immer Plugins runterladen zu müssen... Ich will nur einen Editor mit dem man auch Compiliern kann UND mit dem auch moderne Sachen wie Python-Embedding möglich sind... Also nur das ist meine Bitte im Moment... Den mit einem schrott Compiler den VC++ benutzt kanns ja nicht weiter gehen...

6

Friday, August 17th 2007, 8:44pm

Ich würde bei der EE mal spontan auf das Platform SDK tippen, könnteste versuchen das zu installieren und schauen ob das dann geht.

Alternativ würde ich Code::Blocks Eclipse/CDT vorziehen, ist einfach ein deutlicher Geschwindigkeitsunterschied bei der CodeCompletion.

MinGW musst du fast immer separat herunterladen, aber der Installer macht daffür dann genau das was du willst und das einfach ;) Und bei Code::Blocks nimmst du dann einen Nightly, die Links gibts im Forum (nicht zu verfehlen), das sind dann 2 weitere Archive, die du noch entpacken musst ...

7

Saturday, August 18th 2007, 2:53pm

Jaja. Aber ich habs jetzt mit Cygwin probiert. Aber da kommt dann das hier:

Quoted

pythonembed.cpp: undefined reference to '_Py_Initialize'
pythonembed.cpp: undefined reference to '_Py_SimpleStringFlags'
pythonembed.cpp: undefined reference to '_Py_Finalize'
Hier nochma der Quellcode:

C/C++ Quellcode

1
2
3
4
5
6
7
8
#include "py25/Python.h"
int main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("print \"hallo dude\"");
  Py_Finalize();
  return 0;
}

8

Saturday, August 18th 2007, 6:10pm

CygWin ist meiner Meinung nach sogesehen ungünstg, dass es die eigene Runtime - dll braucht und dadurch GPL-Zwang besteht - für einen ersucht tut's aber allemal ;)

Bist du dir sicher, dass du für Python keine lib mitlinken musst?

9

Saturday, August 18th 2007, 7:34pm

Ich bin mir siher das ich jetzt Kritik ernte, aber ich benutze am liebsten Dev-C++... (unter windows)

http://bloodshed.net/dev/devcpp.html

damit hab ich bisher alles iwie hingekriegt :thumbup:

10

Saturday, August 18th 2007, 8:19pm

Hm, leider hab ich von lib verlinken und so keine Ahnung. Bisher brauchte ich das auch nich...

Ich denke ma man muss das irgendwie konfigurieren. Vielleicht kannst du mir ja sagen wie? ;D

11

Saturday, August 18th 2007, 8:59pm

wie verwendest du den CygWIN momentan?

Wenn du die cmd verwendest sollte es ein

Bash

1
-LC:\Python25\libs -lpython
tun ;)

12

Saturday, August 18th 2007, 9:20pm

Dann kommt die Fehlermeldung:

Quoted

cannot find -lpython
Ich habs auch mit

Bash

1
gcc -L C:\python25\libs python25.lib
probiert: Kommt auch ein Fehler.

13

Saturday, August 18th 2007, 9:33pm

Ich hab nochmal nachgesehen die Bibliotek (libpython25.a) sollte die Richtige sein ;)

->

Bash

1
g++ SOURCEFILE -o AUSGABEDATEI -LC:\Python25/libs -lpython25


sollte gehen.

Immer noch ungetestet ;)

14

Sunday, August 19th 2007, 8:28am

Hm, dein Command war nich ganz richtig... Zwischen dem -L und dem C:\... muss ein Leerzeichen sein. Wahrscheinlich ein Flüchtigkeitsfehler.

So:

Bash

1
g++ pythonembed.py -o pythonembed.exe -L C:/Python25/libs -lpython25


Ich denke ma das Problem is gelöst denn jetzt kommt kein "Undefined... Undeclared..." oder so, jetzte gibts bei den Include-Datein Fehler in intobject.h und longobject.h

Quoted

intobject.h (44): error '__int64' does not have a name type
longobject.h (43): error '__int64' was not declared in this scope
longobject.h (45): error '__int64' does not have a name type
longobject.h (46): error '__int64' does not have a name type
longobject.h (47): error '__int64' does not have a name type
Tja, das is dann wohl dumm das die Header Fehler haben?!

Also hab ich hab das ganze auch mit dem Lib-Path von Cygwin (ich hab mit cygwin auch python installiert) c:/cygwin/libs probiert: Funktioniert auch nicht.

This post has been edited 1 times, last edit by "neckcracker" (Aug 19th 2007, 8:33am)


15

Sunday, August 19th 2007, 8:39am

Problem gelöst. Ich hab einfach die von Cygwin mitgelieferten Python-Includes benutzt. Alles geht.

Social bookmarks