Berühren Sie nicht meinen Kram
Eine Sache, die ich hasse über distutils (ich denke,er ist der böse, der dies tut) ist, dass es änderungen der shebang-Zeile. In anderen Worten, die mehr rational und Umgebung-vars beschlossen Schrift
#!/usr/bin/env python
wird magisch umgewandelt
#!/whatever/absolute/path/is/my/python
Dies ist auch mit grok: ich grokproject in einem virtualenv zu starten mein Projekt, aber jetzt kann ich Sie nicht verschieben Sie die Entwicklung Verzeichnis um mehr, denn es stellt die absoluten Pfade in der shebang-Richtlinie.
Der Grund, warum, den ich Frage, ist zweierlei
- Ich will es bewegen, weil ich begonnen, in einem Verzeichnis (Experimente) und jetzt will ich verschieben Sie Sie in einem richtigen Weg, aber ich konnte es nicht tun. So habe ich eine neue virtualenv und grokproject und kopierte meine Dateien. Das das Problem behebt, aber lässt meine Neugier für eine rationale Lösung unzufrieden. Insbesondere, wenn der Verweis auf die virtualenv python-interpreter war relativ, das problem wäre nicht vorhanden gewesen sein in den ersten Platz. Sie wissen, das layout der virtualenv, und Sie können sich auf die virtualenv python leicht.
- Der zweite Grund ist, dass ich möchte in der Lage sein, um scp die virtualenv zu einem anderen computer und führen Sie es dort ohne Probleme. Dies ist nicht möglich, wenn Sie hardcoded Pfade.
- Da finde ich eher nervig, dass alle meine installierten Zeug hat eine sehr starke und schmerzhafte Abhängigkeit gegen einen bestimmten Pfad von meinem Dateisystem, insbesondere, wenn eine alternative vorhanden ist.
- So dass Sie wollen, zu bewegen, nur weil es nicht offensichtlich ist, wie? 🙂 Oooookay...
- Hinzugefügt zu der Frage.
- Ich zu kämpfen mit wie ist das zu erklären, weil es so offensichtlich nach einer Weile. 🙂 Der Weg, dies zu tun ist, erstellen Sie ein python-Paket (was Sie offensichtlich getan haben) und halten sich in einem Versionskontrollsystem, wie z.B. subversion. Jedes mal, wenn Sie wollen, installieren Sie es überall, Sie haben zu laufen setup.py. Vor, dass es einfach nicht installiert. Sie können sich nicht bewegen-Installationen zwischen verschiedenen python-Installationen und Maschinen, das wird einfach nicht funktionieren.
- sorry. Ich erkannte jetzt, dass ich schrieb es falsch das erste mal, ging dann zurück und sagte zu mir selbst: "ich schrieb es falsch", und fand die fixed version. Ich wollte nicht sehen, jemand anderes es fest, ich nahm an, es war meins und ich hatte einfach zu tauschen von der aktuellen form auf die andere form um, um es zu korrigieren. Mit diesem im wesentlichen habe ich es rückgängig gemacht.
- Und Sie Dosen Kopie einer virtualenv zu einer anderen Maschine. Es macht einfach keinen Sinn. Das wird nur funktionieren, wenn beide Maschinen konfiguriert sind genau gleich (und in diesem Fall wird dies auch funktionieren).
- ja, aber in diesem Fall ist es anders. Das, was ich bin "installieren" ist eine virtuelle Umgebung, die sein sollte, in sich geschlossene und wahrscheinlich verschoben werden. Die Installation ist eine andere Geschichte, aber wenn ich bereitstellen einer virtualenv, oder das layout einer grokproject zum ersten mal, ich bin nicht etwas zu installieren. Ich bin die Bereitstellung von meine Entwicklungsumgebung.
- Ich lese Ihre Antwort hier: stackoverflow.com/questions/1130402/... . Aus dieser Sicht haben Sie Recht. Trotzdem, ich verstehe nicht den Grund, warum meine Entwicklungsumgebung müssen so streng sein, auf die absolute position sich innerhalb des Dateisystems.
- 1. Der Zweck der buildout ist, so können Sie leicht die Umgebung replizieren. Kopieren einer ganzen Umgebung nach, die Sie ausgeführt haben buildout macht einfach keinen Sinn. Es Niederlagen der ganze Zweck der buildout, und ist wahrscheinlich ein Fehler. 2. Und Sie sind installieren von Sachen. Sie installieren die python-Module und grok, und alles andere, was sich in Ihrer virtuellen python. Dies geschieht, wenn Sie führen Sie das buildout. 3. Die development-Umgebung ist streng auf die position einfach, weil es gibt keinen Grund, es nicht zu sein. Alles, was Sie tun müssen, ist, verschieben Sie es erneut bootstrap und buildout, und Sie sind fertig.
- Es lohnt sich auch zu bemerken, dass virtualenv und buildout teilweise macht ähnliches. Buildout wird nie zu installieren in der system python, aber installiert alle Bibliotheken lokal, und dadurch isolieren Sie die wichtigsten python, von der buildout. Mit virtualenv ist daher inly nützlich, wenn Sie wollen, auch die Isolierung der buildout von der Haupt-python.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Natürlich können Sie die Entwicklung Verzeichnis um. Distutils ändert die Pfade zu den python, die Sie ausführen sollten, wenn Sie es ausführen. Es ist in Grok laufen, wenn Sie laufen die buildout. Umzug und re-run der bootstrap-und der buildout. Fertig!
Distutils ändert den Pfad zu den Python geben, die Sie verwenden, um distutils mit. Wenn es nicht, dann könnten Sie am Ende der Installation eine Bibliothek in einem python-version, aber wenn Sie versuchen, führen Sie das Skript würde es scheitern, weil es ausführen würde, mit einer anderen python-version, die nicht über die Bibliothek.
Das ist nicht Wahnsinn, es ist in der Tat die einzige vernünftige Weg, es zu tun.
Update:
Wenn Sie wissen, was Sie tun, Sie können dies tun:
Stellen Sie sicher, reinigen Sie die build-Verzeichnis zuerst obwohl. 🙂
Distutils wird automatisch ersetzen Sie die UMMANTELUNG mit dem Speicherort des Python-binary, die verwendet wurde, zu führen setup.py. Um dieses Verhalten zu überschreiben, haben Sie zwei Möglichkeiten:
Option 1: Manuell
Kann man die Flagge --executable=/Pfad/zu/meinem/python zu setup.py. Argumente werden akzeptiert.
Beispiel:
Option 2: Automatisch
Ihre andere option ist das hinzufügen einer Zeile, um das setup.cfg. Wenn Sie nicht mit dem setup.cfg ist, erstellen Sie Sie im selben Verzeichnis wie setup.py. Setup.py sucht diese auf Start. Alle angegebenen Optionen können hier noch überschrieben werden, mit Fahnen auf der Befehl-Linie.
python setup.py build --help
😉python setup.py develop
? Meine virtualenv setup führt, dass einige sehr lange shebang Wege, die Ursachebad interpreter
Fehler, wenn Sie versuchen, um Sie auszuführen. Ich habe versuchtsys.executable = '/usr/bin/env python'
aus dem script, aber der Platz scheint zu verursachen-distutils zum setzen von Anführungszeichen in den Kram, die Pausen, die Dinge in einer anderen Art und Weise.Habe ich keine Lösung für dein problem, aber ich sehe einige Gründe für das aktuelle Verhalten distutils.
#!/usr/bin/env python
führt das system die Standard-Python-version. Das ist in Ordnung, solange dein code ist kompatibel mit Sprach-version. Wenn die Standard-version ist aktualisiert (von 2,5 bis 3, sagen) Ihr code oder andere Python-code, die Verweise/usr/bin/env
können aufhören zu arbeiten, obwohl die alten Python-version ist immer noch installiert. Aus diesem Grund macht es Sinn, die "hardcode" den Pfad zu den entsprechenden python-interpreter.Edit: sind Sie richtig in der Annahme, dass die Angabe
python2.4
oder ähnliches löst dieses problem.Edit 2: die Dinge sind nicht so eindeutig, wenn mehrere Installationen des gleichen Python-version vorhanden sind, wie Ned Deily Punkte in den Kommentaren unten.
#!/usr/bin/env python
statt#!/usr/bin/env python2.4
. Welche dieser habe im code angeben? Tut distutils auch die umschreiben, wenn die version-Nummer angegeben wird?In einer der neuesten Versionen von distutils, es ist ein flag, das --no-autoreq, die für mich gearbeitet:
In meinem Fall, ich war das erstellen von RPM-Dateien mit python2.4 ausführbare Datei, die in einem server mit 2,4 und 2,6-Installationen. bdist Links nur die shebangs, wie Sie waren, nach der Ausführung:
In dem Fall, dass Sie die Handhabung der spec - Dateien, können Sie die Lösung erklärt, auf https://stackoverflow.com/a/7423994/722997, hinzufügen:
hatte das gleiche Problem. versucht einen Weg zu finden, um zu verhindern, das berühren, ganz standardmäßig. hier ist die Lösung. im wesentlichen haben wir überschreiben Sie die Standard-Skript kopieren routine (build_scripts).
in setup.py hinzufügen
.. ede/duply.net