Es scheint, dass auf OS X 10.8 (mit Python 2.7) die .pyc
-Dateien erstellt werden, selbst wenn Sie die Umgebungsvariable PYTHONDONTWRITEBYTECODE=1
Wie kann ich das verhindern oder wie kann ich Python davon überzeugen, diese Dateien nicht am selben Ort wie die Quelldateien zu erstellen?
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:
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:
export
. Sie können echo $PYTHONDONTWRITEBYTECODE
, das Sie wollen, und es ist eindeutig festgelegt, und doch python
sieht es nicht ... export
, vergiss aber, es zu setzen. bash
lässt Sie export PYTHONDONTWRITEBYTECODE
, auch wenn es zu nichts definiert ist. export $PYTHONDONTWRITEBYTECODE
.) 1
, aber export
die falsche Variable ist (normalerweise durch unvorsichtigen Missbrauch des Verlaufs bei dem Versuch, ein paar Tastenanschläge zu speichern). export
anstarren, es sieht gut aus ... PYTHONDOTWRITEBYTECODE
. 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. .bash_profile
/ subprocess
/ was auch immer. Ich werde mich nach einer sauberen Umgebung umsehen und mich fragen, warum meine Umgebungsvariable nicht angezeigt wird. 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.
Sie können die Erstellung von .pyc- und .pyo-Dateien mit: python -B script.py
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%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.
Tags und Links python macos python-2.7 osx-mountain-lion pyc