Wie vermeidet man die Erstellung von .pyc-Dateien unter OS X 10.8 mit Python 2.7?

7

Es scheint, dass auf OS X 10.8 (mit Python 2.7) die .pyc -Dateien erstellt werden, selbst wenn Sie die Umgebungsvariable PYTHONDONTWRITEBYTECODE=1

eingerichtet haben

Wie kann ich das verhindern oder wie kann ich Python davon überzeugen, diese Dateien nicht am selben Ort wie die Quelldateien zu erstellen?

    
sorin 29.11.2012, 14:13
quelle

4 Antworten

16

Ich habe das gerade getestet, und es funktioniert gut auf 10.8.2 mit dem von Apple installierten Python 2.7.

%Vor%

Sie können python durch python2.7 , python2.6 oder python2.5 ersetzen, und Sie erhalten das gleiche Ergebnis.

Und es funktioniert auch mit allen von Apple installierten Pythons von 10.5-10.7, und mit all den python.org, Enthought, MacPorts und Homebrew Pythons habe ich auf den verschiedenen Maschinen, die mir zur Verfügung stehen, und dem Standard Python Pakete auf zwei verschiedenen Linux-Distributionen.

Wenn also ein Fehler ist, dann ist das ein sehr spezifischer, was bedeutet, dass Sie uns genau sagen müssen, welches Python (und wie Sie es installiert haben, wenn es nicht auf Lager ist) und welches OS X 10.8.

Es ist viel wahrscheinlicher, dass PYTHONDONTWRITEBYTECODE gerade nicht in pythons Umgebung ist. Wie Mark Ransom vorgeschlagen hat, können Sie dies überprüfen, indem Sie hinzufügen:

%Vor%

Wenn es None heißt, ist das das Problem.

Also, PYTHONDONTWRITEBYTECODE ist nicht in Ihrer Umgebung. Aber du sagst es in deiner Anrufumgebung ist . Wie ist das möglich? Nun, wenn Sie bash verwenden, ist der wahrscheinlichste Grund, dass Sie export it vergessen haben. Von all den dummen Wegen, dies zu tun, habe ich das meiste getan. Aber hier sind einige dumme Dinge, die ich getan habe:

  • Vergiss das export . Sie können echo $PYTHONDONTWRITEBYTECODE , das Sie wollen, und es ist eindeutig festgelegt, und doch python sieht es nicht ...
  • Erinnere dich an export , vergiss aber, es zu setzen. bash lässt Sie export PYTHONDONTWRITEBYTECODE , auch wenn es zu nichts definiert ist.
  • %Code%. (Sie können dies vermeiden, indem Sie es auf etwas setzen, das kein gültiger Bezeichner ist, wie export $PYTHONDONTWRITEBYTECODE .)
  • Denken Sie daran, dass 1 , aber export die falsche Variable ist (normalerweise durch unvorsichtigen Missbrauch des Verlaufs bei dem Versuch, ein paar Tastenanschläge zu speichern).
  • Tippfehler. Egal wie oft Sie export anstarren, es sieht gut aus ...
  • Führen Sie einige Einstellungen im Terminal durch, wechseln Sie zu einem anderen Fenster, kehren Sie zum falschen Terminalfenster zurück und führen Sie PYTHONDOTWRITEBYTECODE .
  • aus
  • Bearbeite python , und statt es neu zu laden oder eine neue Shell zu starten, stelle fest, dass "Ich mache das gleiche direkt", mache einen dummen Tippfehler und verbringe dann eine halbe Stunde damit, meine ~/.bash_profile , um zu sehen, was ich falsch gemacht habe, bevor ich darüber nachdenke, wie ich meine Shell-Geschichte betrachte.
  • Starten Sie ein Python-Skript von einem anderen mit .bash_profile / subprocess / was auch immer. Ich werde mich nach einer sauberen Umgebung umsehen und mich fragen, warum meine Umgebungsvariable nicht angezeigt wird.
  • Starten Sie Python von C mit os.exec* anstelle von execl , so dass Ihr intendiertes Argument execle keine Auswirkung hat. (Auf manchen Plattformen kann dies segfault sein, aber nicht x86 / x64 OS X.)

Wenn Sie dies im Terminal manuell versucht haben, versuchen Sie es erneut.

Wenn Sie dies in Ihrem envp , einem Launcher-Shell-Skript, einem Launcher-Python-Skript oder was auch immer tun, zeigen Sie uns den entsprechenden Code und jemand wird sofort Ihren dummen Fehler finden. Wenn sie dich auslachen, sag ihnen, dass sie meine Antwort lesen sollen, damit sie mich stattdessen auslachen können.

PS, Beachten Sie, dass ich in meinem Test .bash_profile anstelle von export PYTHONDONTWRITEBYTECODE=1 und PYTHONDONTWRITEBYTECODE=1 Zeilen verwendet habe. Ich mache das immer, außer in Shell-Skripten, die portierbar sein müssen, weil es leichter ist, den eklatanten Fehler zu debuggen, den Sie bekommen, wenn Sie dies auf einer Oldschool-Shell versuchen, die nicht die direkte Export-Syntax hat all die dummen Fehler, die ich oben katalogisiert habe.

    
abarnert 15.12.2012 01:55
quelle
6

Sie können die Erstellung von .pyc- und .pyo-Dateien mit: python -B script.py

vermeiden     
dave mankoff 29.11.2012 16:20
quelle
4

Das Einstellen der Umgebung, wie von abarnert beschrieben, ist wirklich der richtige Weg, aber wenn das aus irgendeinem Grund nicht möglich ist, können Sie es zur Laufzeit im Code einstellen.

Fügen Sie einfach Folgendes zum Anfang Ihres Skripts hinzu:

%Vor%

Dies hält Python davon ab, irgendeinen Bytecode nach diesem Punkt zu erzeugen.

%Vor%     
cnelson 16.12.2012 21:35
quelle
1

Ich würde dies am Anfang Ihres Python-Skripts vorschlagen:

%Vor%

Oder verwenden Sie die Methode sys.dont_write_bytecode .

Siehe auch: Wie vermeiden Sie .pyc-Dateien? , die ein paar andere vorschlagen Lösungen, einschließlich einer Methode, die in Python vor 2.6 funktioniert.

    
Alex I 18.12.2012 11:53
quelle