Ich möchte ein Python-Programm auf GitHub platzieren und andere Leute es herunterladen und auf ihren Computern mit verschiedenen Betriebssystemen ausführen lassen. Ich bin relativ neu in Python, habe es aber genug verwendet, um zu bemerken, dass es problematisch sein kann, die verschiedenen Versionen aller enthaltenen Module zusammenzubringen. Ich habe gerade die Verwendung von entdeckt requirements.txt
(generiert mit pipreqs
und bereitgestellt mit dem Befehl pip install -r /path/to/requirements.txt
), war aber sehr überrascht zu bemerken, dass requirements.txt
nicht angegeben wird, welche Version von Python verwendet wird, so dass es offensichtlich nicht die vollständige Lösung für sich ist. Meine Frage lautet also: Welche Spezifikationen / Dateien / etwas anderes wird benötigt, um sicherzustellen, dass jemand, der mein Projekt herunterlädt, es tatsächlich mit möglichst wenigen Problemen ausführen kann.
EDIT: Mein Plan war es, mich von der Antwort leiten zu lassen, die die meisten positiven Stimmen erhielt. Aber bis jetzt hat nach 4 Antworten und 127 Ansichten keine einzige Antwort auch nur eine positive Bewertung. Wenn einige der Antworten nicht gut sind, wäre es nützlich, einige Kommentare zu sehen, warum sie nicht gut sind.
quelle
sys
oderos
oder vom Unterprozess oder mathematischer / analytischer sind? Ersteres kann sich mit jeder Version von Python ändern und später kann es ziemlich versionunabhängig sein. Welche abhängigen Bibliotheken? Numpy und Pandas leisten plattformübergreifend hervorragende Arbeit, sodass Sie einfach überprüfen können, ob Sie eine Min-Version haben. Welche Hauptversion von Python? Der Unterschied zwischen Python 2.x und 3.x mit abhängigen Bibliotheken wird noch schwieriger. Wenn Sie guten Code für eine gängige Hauptversion schreiben, ist dies ein guter Anfang.Antworten:
Haben Sie darüber nachgedacht, eine
setup.py
Datei einzurichten ? Es ist eine praktische Möglichkeit, all Ihre ... gut eingerichteten Daten an einem einzigen Ort zu bündeln. Alles, was Ihr Benutzer tun muss, ist A) Ihr Repo zu klonen und B) auszuführenpip install .
, um das auszuführensetup.py
Es gibt eine großartige Stack-Diskussion darüber.
Sowie ein Handle-Beispiel, das vom Anforderer geschrieben wurde.
Dies sollte die meisten Anwendungsfälle abdecken. Wenn Sie es nun wirklich verteilbar machen möchten, sollten Sie es in PyPi , dem offiziellen Distributionszentrum, einrichten .
Wenn Sie darüber hinaus fragen, wie Sie ein Programm "OS-unabhängig" machen können, gibt es keine Einheitsgröße. Es hängt davon ab, was Sie mit Ihrem Code machen. Erfordert die Untersuchung, wie Ihr bestimmter Code mit diesen Betriebssystemen usw. interagiert.
quelle
Es gibt viele, viele, viele, viele, viele, viele, viele Möglichkeiten, dies zu tun. Ich werde die Prinzipien hinter jedem skaten und es ist ein Anwendungsfall.
1. Eine Python-Umgebung
Es gibt viele Möglichkeiten, dies zu tun.
pipenv
, condarequirments.txt
, etc etc.Mit einigen davon können Sie Python-Versionen angeben. Geben Sie bei anderen nur eine Reihe von Python-Versionen an, von denen Sie wissen, dass sie funktionieren. Wenn Sie beispielsweise Python 3.7 verwenden, wird 3.6 wahrscheinlich nicht unterstützt. Es gibt nur ein oder zwei kleinere Änderungen. 3.8 sollte auch funktionieren.
Eine andere ähnliche Methode ist
setup.py
. Diese werden im Allgemeinen verwendet, um Bibliotheken - wie PyInstaller (eine andere Lösung, die ich unten erwähne) oder numpy oder wxPython oder PyQt5 usw. - für den Import / die Befehlszeilenverwendung zu verteilen. Die Python-Verpackungsanleitung ist sehr nützlich, und es gibt viele Tutorials. (googlepython setup.py tutorial
) In diesen Dateien können Sie auch Anforderungen angeben.2. Ein Container
Docker ist der Große. Wenn Sie noch nichts davon gehört haben, werde ich überrascht sein. Eine schnelle Google einer Zusammenfassung kommt mit bis diese , die ich Teil zitieren werde von:
Das sollte es für Sie zusammenfassen. (Beachten Sie, dass Sie kein bestimmtes Betriebssystem für Container benötigen.)
3. Eine ausführbare Datei
Zum Zeitpunkt des Schreibens gibt es zwei Hauptwerkzeuge, die dies tun. PyInstaller und cx_Freeze. Beide werden aktiv weiterentwickelt. Beide sind Open Source.
Sie nehmen Ihr Skript und das Tool kompiliert es zu Bytecode, findet die Importe, kopiert diese und erstellt eine tragbare Python-Umgebung, die Ihr Skript auf dem Zielsystem ausführt, ohne dass der Endbenutzer Python benötigt.
Ich persönlich bevorzuge PyInstaller - ich bin einer der Entwickler. PyInstaller bietet alle Funktionen über ein Befehlszeilenskript und unterstützt die meisten Bibliotheken, die Sie sich vorstellen können - und ist erweiterbar, um mehr zu unterstützen. cx_Freeze erfordert ein Setup-Skript.
Beide Tools unterstützen Windows, Linux, MacOS und mehr. PyInstaller kann einzelne Datei-Exes oder ein Paket mit einem Ordner erstellen, während cx_Freeze nur ein Ordner-Bundle unterstützt. PyInstaller 3.6 unterstützt Python 2.7 und 3.5-3.7 - aber 4.0 wird nicht unterstützt Python 2. cx_Freeze abgesunken Python 2 - Unterstützung der letzten Hauptversion (6.0 glaube ich).
Wie auch immer, genug über die Tools-Funktionen; Sie können diese selbst untersuchen. ( Weitere Informationen finden Sie unter https://pyinstaller.org und https://cx-freeze.readthedocs.io. )
Wenn Sie diese Verteilungsmethode verwenden, stellen Sie normalerweise Quellcode auf dem GitHub-Repo bereit, einige Exes (eine für jede Plattform), die zum Herunterladen bereitstehen, und Anweisungen zum Erstellen des Codes in eine ausführbare Datei.
quelle
Das beste Werkzeug, das ich bisher dafür verwendet habe, ist Pipenv . Es vereinheitlicht und vereinfacht nicht nur den gesamten pip + virtualenv-Workflow für Sie als Entwickler, sondern garantiert auch, dass die genauen Versionen aller Abhängigkeiten (einschließlich Python selbst) erfüllt werden, wenn andere Personen Ihr Projekt damit ausführen.
Auf der Projektwebsite wird die Verwendung des Tools sehr gut erklärt, der Vollständigkeit halber werde ich hier jedoch eine kurze Erklärung geben.
Sobald Sie Pipenv installiert haben (z. B. durch Ausführen
pip install --user pipenv
), können Sie in das Verzeichnis Ihres Projektspipenv --python 3.7
wechseln und es ausführen , sodass Pipenv eine neue virtuelle Umgebung für Ihr Projekt erstellt, eine Pipfile und eine Pipfile.lock erstellt (dazu später mehr). . Wenn Sie fortfahrenpipenv install -r requirements.txt
, werden alle Ihre Pakete installiert. Jetzt können Sie apipenv shell
ausführen, um Ihre neue virtuelle Umgebung zu aktivieren, oder a,pipenv run your_main_file.py
um einfach Ihr Projekt auszuführen.Schauen wir uns nun den Inhalt Ihrer Pipfile an. Es sollte etwas Ähnliches sein:
Diese Datei enthält die für Menschen lesbaren Spezifikationen für die Abhängigkeiten Ihres Projekts (beachten Sie, dass sie auch die Python-Version angibt). Wenn Ihre Anforderungen.txt Versionen angeheftet hatten, könnte Ihre Pipfile diese auch haben, aber Sie können sie sicher mit einem Platzhalter versehen, da die genauen Versionen in Pipfile.lock gespeichert sind. Jetzt können Sie beispielsweise
pipenv update
Ihre Abhängigkeiten aktualisieren und vergessen nicht, Pipfile und Pipfile.lock für Ihr VCS zu übernehmen.Sobald die Leute Ihr Projekt
pipenv install
geklont haben, müssen sie es nur noch ausführen und Pipenv kümmert sich um den Rest (möglicherweise wird sogar die richtige Version von Python für sie installiert).Ich hoffe das war nützlich. Ich bin in keiner Weise mit Pipenv verbunden, wollte nur dieses großartige Tool teilen.
quelle
Wenn sich Ihr Programm weniger mit GUI befasst oder über eine Web-GUI verfügt, können Sie den Code mithilfe von Google Colaboratory freigeben.
https://colab.research.google.com/
Jeder kann es mit derselben Umgebung ausführen. Keine Installation erforderlich.
quelle
Wenn Ihnen das Konvertieren aller Ihrer Python-Skripte in eine ausführbare Datei helfen kann, hilft meine Antwort unten ...
Ich habe seit 3 Jahren eine große Desktop-Anwendung ausschließlich in Python entwickelt. Es ist ein GUI-basiertes Tool, das auf der pyqt-Bibliothek basiert (Python-Bindungen des QT C ++ - Frameworks).
Ich verwende derzeit die Paketbibliothek " py2exe ": ist eine distutils-Erweiterung, mit der eigenständige ausführbare Windows-Programme (32-Bit und 64-Bit) aus Python-Skripten erstellt werden können. Alles was Sie tun müssen ist:
install py2exe: 'pip install py2exe'
Erstellen Sie ein setup.py-Skript: Hiermit wird der Inhalt der endgültigen EXE-Datei angegeben (Name, Symbol, Autor, Datendateien, gemeinsam genutzte Bibliotheken usw.)
Ausführen: python setup.py py2exe
Ich verwende auch die Software "Inno Setup" , um ein Installationsprogramm zu erstellen: Erstellen von Verknüpfungen, Festlegen von Umgebungsvariablen, Symbolen usw.
quelle
Ich denke, Sie können Docker mit Ihrem Python https://github.com/celery/celery/tree/master/docker verwenden
Bitte folgen Sie den Dateien und ich denke, Sie können herausfinden, wie Sie Ihre Docker-Datei für Ihre Python-Skripte erstellen können!
quelle
Da es in den anderen Antworten fehlt, möchte ich einen ganz anderen Aspekt hinzufügen:
Unit Testing. Oder allgemein testen.
Normalerweise ist es gut, eine bekannte gute Konfiguration zu haben. Abhängig von den Abhängigkeiten des Programms müssen Sie möglicherweise verschiedene Paketkombinationen testen. Sie können dies automatisiert mit z. B.
tox
oder als Teil einer CI / CD-Pipeline tun .Es gibt keine allgemeine Regel, welche Paketkombination getestet werden soll, aber normalerweise ist die Python2 / 3-Kompatibilität ein Hauptproblem. Wenn Sie starke Abhängigkeiten von Paketen mit großen Versionsunterschieden haben, sollten Sie in Betracht ziehen, diese verschiedenen Versionen zu testen.
quelle
... making sure it runs correctly ...
? Testing ist ein wesentlicher Bestandteil , sicherzustellen, läuft es richtig, deshalb ist es ein wesentlicher Bestandteil der Vorbereitung zu verteilen, aber es ist noch nichts mit tatsächlich zu tun zu verteilen esIch werde Ihnen eine sehr kurze Zusammenfassung einiger der vorhandenen verfügbaren Lösungen geben, wenn es um Python-Verpackungen geht, aus denen Sie auswählen können (Wissen ist Macht):
Befolgen Sie die Richtlinien unter Strukturieren Ihres Projekts . Diese Konventionen werden von der Python-Community weitgehend akzeptiert und sind normalerweise ein guter Ausgangspunkt, wenn Neulinge mit dem Codieren in Python beginnen. Wenn Sie diese Richtlinien befolgen, wissen Pythonisten, die Ihr Projekt / Ihre Quelle bei Github oder anderen ähnlichen Orten ansehen, sofort, wie es installiert wird. Das Hochladen Ihres Projekts auf pypi sowie das Hinzufügen von CI unter Befolgung dieser Regeln ist ebenfalls problemlos.
Sobald Ihr Projekt gemäß den Standardkonventionen richtig strukturiert ist, können im nächsten Schritt einige der verfügbaren Gefriergeräte verwendet werden , falls Sie Ihren Endbenutzern ein Paket senden möchten, das sie installieren können, ohne dass sie gezwungen sind, Python auf ihren zu installieren Maschinen. Beachten Sie jedoch, dass diese Tools keinen Codeschutz bieten. Andernfalls wäre das Extrahieren des ursprünglichen Python-Codes aus den endgültigen Artefakten in allen Fällen trivial
Wenn Sie Ihr Projekt dennoch an Ihre Benutzer senden möchten , ohne sie zur Installation von Entwicklungsabhängigkeiten zu zwingen, und Sie sich auch für den Codeschutz interessieren , damit Sie keine der vorhandenen Gefriergeräte in Betracht ziehen möchten, verwenden Sie möglicherweise Tools wie Nuitka , Shedskin , Cython oder ähnliche. Normalerweise ist das Umkehren von Code aus den von diesen Tools erzeugten Artefakten überhaupt nicht trivial ... Der Cracking-Schutz ist eine andere Sache, und wenn Sie Ihrem Endbenutzer keine physische Binärdatei zur Verfügung stellen, können Sie nicht viel tun darüber anders als sie zu verlangsamen :)
Falls Sie in Ihrem Python-Projekt externe Sprachen verwenden müssen, ist https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages ein weiterer klassischer Link, der Ihnen in den Sinn kommt. Fügen Sie CI die Build-Systeme solcher Tools hinzu Regeln von 1 wären ziemlich einfach.
Trotzdem würde ich vorschlagen, bei Bulletpoint 1 zu bleiben, da ich weiß, dass dies mehr als gut genug ist, um Ihnen den Einstieg zu erleichtern. Außerdem sollte dieser bestimmte Punkt viele der vorhandenen Anwendungsfälle für Python- "Standard" -Projekte abdecken.
Obwohl dies kein vollständiger Leitfaden sein soll, können Sie Ihr Python-Projekt in kürzester Zeit für die Massen veröffentlichen.
quelle