On 23 jun, 12:49, Kurt Smith <kwmsm...@gmail.com> wrote: > On Mon, Jun 22, 2009 at 9:49 PM, Andras > > > > > > Pikler<andras.pik...@students.olin.edu> wrote: > > Hi! > > > Short: I need to turn a Python program that I (mostly) wrote into C code, > > and I am at a loss. > > > Long: I’m doing research/programming for a professor, and we are working > > with MIDI files (a type of simple music file). The research deals with > > generating variations from a musical melody; currently, my Python code uses > > a Python midi package I found online to read the notes in question from a > > midi file, about 350 lines of my own code to generate a variation based on > > these notes and the professor’s algorithms, and finally the package again to > > write the new melody to another midi file. > > > Now, my professor would like to have this exact code in C/C++, as she > > believes C is more compatible with MATLAB, and wants the code to be > > available in multiple languages in case a programmer works for her in the > > future who knows C but not Python. While I know a tiny bit of C (emphasis on > > the tiny), I would much prefer if there were some sort of automatic compiler > > I could use to turn my Python code into C than taking a week or two or three > > to learn the minimum I need about C, find a way to access MIDI files in it, > > and rewrite all of my code. > > > After some googling, I found and tried Shedskin, but it doesn’t work, as the > > Python midi package I’m using uses modules which Shedskin does not support. > > Otherwise, I haven’t found much. Is there anything out there to help me do > > this? If not, from anyone who has experience in this regard, how daunting > > should I expect this to be? > > Taking on C from a cold start and being able to handle the ins and > outs of interfacing with Python isn't something that's feasible in > 'two or three weeks'. Here are a couple of options -- take 'em or > leave 'em: > > 1) Put the code in Cython:http://www.cython.org/ (full disclosure: > I'm doing a GSoC project with Cython). It will convert pretty much > any python code into C code (even closures are supported in the most > recent version, I think), and the C code can then be compiled into an > extension module. > > The only problem with the above is the C code isn't, at first blush, > easy to read. Nor is it supposed to be changed by the user. So that > leads us to option... > > 2) Write the core functionality in C yourself, and then wrap those C > functions in Cython. You'll want to take a look at the documentation: > > http://docs.cython.org/ > > and, more specifically on wrapping C code: > > http://docs.cython.org/docs/external_C_code.html > > I don't think you'll be able to avoid learning C, though. > > Kurt
There's another (very good) option: Try shedskin http://code.google.com/p/shedskin/ . Shedskin can compile a whole program or part of it as an extension module. It translates python code to c++ and compiles it. The good thing is that you don't have to know anything about c or c++. You simply have to restrict your coding style a little bit to make it explicitly static. For example: if you declare a = 5, that means that "a" is an integer, so you cannot then change it to a string (a = "hello", won't work). Luis -- http://mail.python.org/mailman/listinfo/python-list