Domanda

Sto iniziando un piccolo progetto python / medie dimensioni, probabilmente nel Test Driven Development. I miei sfondi sono più in C e Java di Python (io ho usato formica e makefile)

So che in python potrebbe non essere necessario un tool di creazione, ma lo farò, perché userò Cython e PyInstaller (la cosa dovrebbe funzionare su un paio di diversi UNIX, senza dipendere direttamente sul pitone) e mi piacerebbe come la convenienza di selezionando il test di forma CLI, Ricostruire la documentazione, forse controllare le dipendenze, ecc.

Qualcuno si lamenta che pitone manca uno strumento make-like. So che esistono pochi strumenti, come scon e finitrice , ma mi piacerebbe sentire da utenti reali e non solo il loro sito web. Fa uso di chiunque finitrice ?

Qual è la solita setup.py che viene fornito con molti pacchetti? Ho guardato in un paio per vedere se v'è un uso comune, ma non ho trovato nulla di interessante (forse ho usato gli esempi sbagliati)

Ti consigliamo di attaccare con le cose che già conosco (formica e Makefile) almeno per iniziare? Se è così, c'è qualche estensione formica consigliate per python (+ Cython + pyinstaller + PyUnit)?


EDIT: per evitare ulteriori risposte come uno di JWP, si noti che, per questo progetto, ho assolutamente bisogno del mio programma in un eseguibile standalone perché è assolutamente impossibile per avere un pitone VM sulla piattaforma di destinazione dove l'eseguibile verrà eseguito. Ho esattamente lo stesso hw disponibili per la compilazione, in modo per fortuna non ho bisogno di cross-compilazione (ma mi piacerebbe fare lo sviluppo su un più amichevole Linux).

Mi piacerebbe anche verificare se il mio codice compilato nel Cython fin dall'inizio, di non ottimizzare prematuro, ma solo per essere sicuri che non mi va troppo lontano con l'uso di funzioni non compatibili, che richiederebbe un doloroso refactoring se Cython sarebbe gravemente necessaria.

Quindi, per favore concentrarsi su mia domanda reale

È stato utile?

Soluzione

I tuoi requisiti suggeriscono piuttosto Scons che, secondo il loro sito web, ha un maggiore controllo sulla varietà di compiti di costruzione di Paver . In quest'ultimo si dovrebbe finire con un sacco di sh() che gestisce un programma di regolare linea di comando.

Di recente, ho iniziato ad usare Paver che è veramente grande per eseguire i test, costruire documentazioni con Sfinge , ma io uso Python solo puro. Se volete vedere ciò che è possibile con Paver Consiglio vivamente questi 2 articoli: conversione-da-fare-per-finitrice e scrittura-tecnico- documentazione da Doug Hellmann e sicuramente vuole controllare il suo pavement.py file di configurazione .

Altri suggerimenti

If it is at all possible, I'd suggest avoiding extension modules(C/cython) in the beginning. Get your all code written in Python, use a simple distutils based configuration, run your tests using -m (python -m mypkg.test.testall, or whatever; import unittest).

Once you get your project to a comfy state, then start tackling some optimizations with cython and the extra project management that comes with that. distutils can build extension modules, so I'm not sure you'll need make/scons..

 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py

I've been using setuptools for this, sometimes in combination with Ant for more complex stuff, or for integrating with other builds. In general it has worked well for me, but I've heard some people at #python (freenode) complain about a generally low source quality for this package, and recommending the standard distutils.

One thing to really watch out with if you are used to Java (like me), is that python does not support split packages. That is, you cannot put site.db in src/site/db, site.view in src2/site/view, put src and src2 on PYTHONPATH and the expect everything to work. This caused major headaches for me with the build tools, it worked a bit sporadically :)

One tool I love is virtualenv: http://pypi.python.org/pypi/virtualenv

from the site: What It Does virtualenv is a tool to create isolated Python environments. The basic problem being addressed is one of dependencies and versions, and indirectly permissions. Imagine you have an application that needs version 1 of LibFoo, but another application requires version 2. How can you use both these applications? If you install everything into /usr/lib/python2.4/site-packages (or whatever your platform's standard location is), it's easy to end up in a situation where you unintentionally upgrade an application that shouldn't be upgraded.

You can also try: http://pypi.python.org/pypi/zc.buildout

from the site: The Buildout project provides support for creating applications, especially Python applications. It provides tools for assembling applications from multiple parts, Python or otherwise. An application may actually contain multiple programs, processes, and configuration settings.

Tried it a couple of times, excellent for deploying development envrionments, maybe it's too much for your needs.

I've also been told and read in a couple of places that nose is a very cool testing tool http://somethingaboutorange.com/mrl/projects/nose/0.11.1/, I'm looking for some free time to try it.

Hope It helps Cheers, Ale

to avoid further answers like jwp's one, note that, for this project, I absolutely need my program being a standalone executable because it is absolutely impossible to have a python VM on the target platform where the executable will run. I have exactly the same hw available for compiling, so luckly I don't need to cross-compile (but I'd do the development on a more friendly Linux).

I'd also like to test if my code compile in Cython from the beginning, not to premature optimize, but just to be sure that I'm not going too far with the use of incompatible features, which would require a painful refactoring if Cython would be seriously needed.

If all you're looking for is to have a stand-alone executable, you don't need to run Cython. There are a few good libraries for doing this:

However, to run Python code, you're simply going to have to install an interpreter or virtual machine on the target machine in some form or fashion. The solutions I presented involve merely embedding the interpreter to make it easier to install. In fact, I'm pretty sure (but could be wrong) that Cython won't allow you to build a stand-alone executables. It's mainly meant for creating extensions to the Python interpreter.

However, there are a couple of other alternatives. If you have a Java interpreter on the target machine, you can run Jython. There's also a IronPython for .net. However, you will still have to distribute the runtimes for these languages with your project.

In short, if you want a stand-alone executable with no dependencies, your only option is pretty much to go with straight C or C++.

If you are looking for a simple python based build tool. Check out pynt. Tasks in pynt are just (decorated) python function. It also support Rake style parameter passing to tasks.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top