2016-08-01 30 views
0

Plattform zu tun ist: Windows 7
Python: 2.7.3einen neuen Weg zu PTYHONPATH hinzufügen und für Programm verwenden, das es NSIS

StrCpy $NETWORK_PATH "\\someserver\network\path\here" 
DetailPrint "$\n" 
DetailPrint "Setting up paths required" 
Push "SETX PYTHONPATH $NETWORK_PATH;$NETWORK_PATH\lib" 
Call Execute 
Push '"C:\Python27\python.exe" setup.py deploy' 
Call Execute 

Function Execute 
    Exch $0 
    # execution of the command and return success or failure 
FunctionEnd 

oben Dies als NSIS-Installer kompiliert und auf mehreren Rechnern laufen.

Problem "C:\Python27\python.exe" setup.py deploy hängt davon ab, dass $ NETWORK_PATH für die erfolgreiche Ausführung.

Wenn wir es zum ersten Mal ausführen, wird $ NETWORK_PATH an die Umgebungsvariable PYTHONPATH angehängt, aber "C:\Python27\python.exe" setup.py deploy schlägt fehl, da PYTHONPATH nur in der neuen Eingabeaufforderung oder im nächsten Lauf wirksam wird.

Gibt es eine Möglichkeit, den angehängten PYTHONPATH im selben Lauf selbst wirksam zu machen?

Momentan führen wir es zweimal aus - einmal, um PYTHONPATH zu setzen und den Fehler zu akzeptieren, zum zweiten Mal, wenn es erfolgreich ausgeführt wird.

Ein anderer alternativer Ansatz, den wir ausprobiert haben, ist - wir haben 2 ausführbare Dateien erstellt, einen zum Einstellen von PYTHONPATH und einen weiteren zum Ausführen von Python Script. Dann legen wir beide im Batch-Skript zum Ausführen.

Aber meine Präferenz ist das Ganze in einer Datei und in einem Lauf zu erreichen.

+0

haben Sie import sys versucht, und sys.path ändern? –

+0

@KennyOstrom hatten wir ursprünglich, dass im Python-Skript selbst mit sys.path, auf diese Weise es zu tun, läuft auf Probleme, wenn unsere Server DNS-Probleme hatte. Also haben wir Installer gemacht, wo wir schnell den Netzwerkpfad zu IPs ändern können und das Installationsprogramm fertig machen können. Für uns, das Python-Skript in allen Maschinen zu bearbeiten, wurde Overhead-Task. :( –

+0

Ich verstehe den Unterschied nicht. Die einzige systemspezifische Änderung setzt NETWORK_PATH in der Umgebung auf verschiedenen Systemen, und Sie tun das bereits. –

Antwort

1

Sie können die Installateure Umgebung aktualisieren, wird es von untergeordneten Prozessen geerbt werden:

System::Call 'Kernel32::SetEnvironmentVariable(t "PYTHONPATH", t "$NETWORK_PATH;$NETWORK_PATH\lib")i.r0' ; $0 will be != "0" on success 
Push '"C:\Python27\python.exe" setup.py deploy' 
Call Execute 
+0

Vielen Dank, werde versuchen und das Update veröffentlichen –