Frage

Ich fange ein kleines / mittleres Python-Projekt, wahrscheinlich in Test Driven Development. Meine Hintergründe sind in C und Java als Python (I verwendet Ameise und Make-Datei)

Ich weiß, in Python, dass Sie nicht ein Build-Tool benötigen könnten, aber ich will, weil ich cython verwenden werden und PyInstaller (das Ding sollte auf ein paar verschiedenen UNIX-Varianten arbeiten, ohne direkt auf Python abhängig) und ich würde wie die Bequemlichkeit, die Tests Form CLI von der Auswahl, die Dokumentation erstellen, vielleicht Abhängigkeiten überprüfen, etc.

Jemand ist, dass Python beschweren fehlt ein Make-artiges Werkzeug. Ich weiß, dass einige Werkzeuge existieren, wie scon und Fertiger ?

Was ist über die üblichen setup.py, die mit vielen Paketen kommt? Ich sah in ein paar zu sehen, ob es eine gemeinsame Nutzung, aber ich habe nichts interessant finden (vielleicht habe ich die falschen Beispiele)

Haben Sie empfehlen mit Dingen kleben Ich weiß schon (ant und Makefile) zumindest zu beginnen? Wenn ja, gibt es eine Ameise Erweiterung, die Sie für Python empfehlen (+ cython + pyinstaller + PyUnit)?


EDIT: zu vermeiden, weitere Antworten wie JWP ist ein, zur Kenntnis, dass für dieses Projekt, brauche ich unbedingt mein Programm eine eigenständige ausführbare Datei zu sein, weil es absolut ist unmöglich ein Python-VM auf der Zielplattform haben wo die ausführbare Datei ausgeführt wird. Ich habe genau das gleiche hw für die Erstellung, so luckly brauche ich nicht zu Cross-Kompilierung (aber ich würde die Entwicklung auf einem Freundlichen Linux tun).

Ich würde auch testen möchte, ob mein Code in Cython von Anfang an zu kompilieren, nicht zu einer vorzeitigen optimize, aber nur um sicher zu sein, dass ich nicht zu weit mit der Verwendung von inkompatiblen Funktionen gehen, die eine schmerzhafte erfordern würde Refactoring, wenn Cython ernsthaft benötigt werden.

Also bitte konzentrieren sich auf meine eigentliche Frage

War es hilfreich?

Lösung

Ihre Anforderungen vorschlagen eher Scons , die nach ihrer Website, mehr Kontrolle über die Vielzahl von Bauaufgaben hat als Paver . Im letzteren würden Sie eine Menge sh() am Ende mit, die ein regelmäßigen Kommandozeilenprogramme ausgeführt wird.

Vor kurzem begann ich mit Paver , die wirklich toll Tests laufen, bauen Dokumentationen mit Sphinx , aber ich verwende nur reinen Python. Wenn Sie sehen wollen, was mit Fertiger möglich ist, empfehle ich diese 2 Artikel: Umwandlung-from-Make-to-Fertiger und Schreib technisch- Dokumentation von Doug Hellmann und Sie wollen auf jeden Fall zu überprüfen, seine pavement.py Konfigurationsdatei .

Andere Tipps

Wenn es überhaupt möglich ist, würde ich vermeiden vorschlagen Erweiterungsmodule (C / cython) am Anfang . Holen Sie sich Ihren gesamten Code in Python geschrieben, verwenden Sie eine einfache distutils basierte Konfiguration, führen Sie Ihre Tests mit -m (python -m mypkg.test.testall, oder was auch immer, Import unittest ).

Wenn Sie Ihr Projekt zu einem bequemen Zustand zu bekommen, dann beginnen, einige Optimierungen mit cython und das zusätzlichen Projektmanagement Bewältigung, die damit kommt. distutils können Erweiterungsmodule bauen, also bin ich nicht sicher, ob Sie brauchen machen / scons ..

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

Ich habe mit Setuptool für diese, manchmal in Kombination mit Ant für komplexere Sachen oder für die mit anderen Builds zu integrieren. Im allgemeinen hat es gut für mich gearbeitet, aber ich habe einige Leute bei #python (freenode) beschweren sich um eine allgemein niedrige Quellen Qualität für dieses Paket, und empfehlen Standard distutils .

Eine Sache wirklich aufpassen mit, wenn Sie Java verwendet werden (wie ich), ist, dass Python nicht Split-Pakete unterstützt. Das heißt, können Sie nicht setzen site.db in src / site / db, site.view in src2 / site / Ansicht, setzen src und src2 auf PYTHONPATH und erwarten, dass alles funktioniert. Dies führte zu großen Kopfschmerzen für mich mit den Build-Tool, ist es ein wenig sporadisch gearbeitet:)

Ein Werkzeug, das ich liebe, ist virtualenv: http://pypi.python.org/pypi/virtualenv

von der Website: Was sie tut, virtualenv ist ein Werkzeug isoliert Python-Umgebungen zu erstellen. Das Grundproblem angegangen wird, ist ein von Abhängigkeiten und Versionen, und indirekt Berechtigungen. Stellen Sie sich vor Sie haben eine Anwendung, die Version 1 von libfoo braucht, aber eine andere Anwendung erfordert Version 2. Wie kann man diese beiden Anwendungen verwenden? Wenn Sie alles in /usr/lib/python2.4/site-packages installieren (oder was auch immer Ihre Plattform Standard Lage ist), ist es einfach, in einer Situation zu landen, wo Sie versehentlich eine Anwendung aktualisieren, die nicht aktualisiert werden sollen.

Sie können auch versuchen: http://pypi.python.org/pypi/zc. buildout

von der Website: Das Buildout Projekt unterstützt Anwendungen für die Erstellung, insbesondere Python-Anwendungen. Es bietet Werkzeuge für Anwendungen aus mehreren Teilen, Python und andere zusammen. Eine Anwendung kann tatsächlich mehrere Programme, Prozesse und Konfigurationseinstellungen enthalten.

es ein paar Mal versucht, ausgezeichnet für envrionments Entwicklung bereitstellen, vielleicht zu viel, es ist für Ihre Bedürfnisse.

Ich habe auch in ein paar Orten erzählt und gelesen wurde, die Nase ein sehr cooles Test-Tool ist http://somethingaboutorange.com/mrl/projects/nose/0.11.1/ , ich bin für einige freie Zeit auf der Suche, es zu versuchen.

Hoffe, es hilft Prost, Ale

  

weitere Antworten wie die JWP man zu vermeiden, dass beachten Sie, dass für dieses Projekt, brauche ich unbedingt mein Programm eine eigenständige ausführbare Datei zu sein, weil es absolut unmöglich ist, einen Python-VM auf der Zielplattform zu haben, wo die ausführbare Datei ausgeführt wird. Ich habe genau das gleiche hw für die Erstellung, so luckly brauche ich nicht zu Cross-Kompilierung (aber ich würde die Entwicklung auf einem Freundlichen Linux tun).

     

Ich würde auch testen möchte, ob mein Code in Cython von Anfang an zu kompilieren, nicht zu einer vorzeitigen optimize, aber nur um sicher zu sein, dass ich nicht zu weit mit der Verwendung von inkompatiblen Funktionen gehen, die eine schmerzhafte erfordern würde Refactoring, wenn Cython ernsthaft benötigt werden.

Wenn alle Sie suchen ist eine eigenständige ausführbare Datei zu haben, brauchen Sie nicht Cython laufen. Es gibt ein paar gute Bibliotheken, dies zu tun:

Um jedoch zu Python-Code ausführen, sind Sie einfach zu gehen wurde zu einen Dolmetscher oder eine virtuelle Maschine auf dem Zielcomputer in irgendeiner Form oder Art und Weise installieren. Die Lösungen, die ich vorgestellt beinhalten Einbettung lediglich den Interpreter es leichter zu installieren. In der Tat, ich bin ziemlich sicher (aber könnte falsch sein), dass Cython werden Sie nicht zulassen, dass eine eigenständige Programme bauen. Es ist vor allem gedacht für Erweiterungen der Python-Interpreter zu schaffen.

Es gibt jedoch ein paar andere Alternativen. Wenn Sie ein Java-Interpreter auf dem Zielcomputer haben, können Sie laufen Jython . Es gibt auch einen Ironpython für .net. Sie werden jedoch nach wie vor die Laufzeiten für diese Sprachen mit Ihrem Projekt verteilen müssen.

Kurz gesagt, wenn Sie eine eigenständige ausführbare Datei ohne Abhängigkeiten wollen, ist Ihre einzige Option ist ziemlich viel mit geradem C oder C ++ zu gehen.

Wenn Sie nach einem einfachen Python-basierten Build-Werkzeug suchen. Schauen Sie sich Pynt . Aufgaben in Pynt sind nur (dekoriert) Python-Funktion. Es ist auch Rake Stil Parameter Aufgaben unterstützen geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top