2009-03-18 2 views
1

Ich muss easy_install als eine Funktion aufrufen, um einige Python-Eier von einer Reihe von Servern zu installieren. Genau was ich installiere und woher ich es bekomme, wird zur Laufzeit festgelegt: Welche Server ich zum Beispiel verwende, hängt vom geografischen Standort des Computers ab.Was ist der richtige Weg, um zusätzliche find-Links zu easy_install hinzuzufügen, wenn sie als Funktion aufgerufen werden?

Da ich nicht garantieren kann, dass ein einzelner Server immer verfügbar sein wird, wurde entschieden, dass mein Skript eine Anzahl von Servern überprüfen muss. Einige Standorte haben unerschwingliche Web-Filter, so dass ich einen UNC-Pfad überprüfen muss. Weitere Standorte erfordern mich eine Mischung zu überprüfen, wie in diesem Beispiel:

myargs = ['-vv', '-m', '-a', '-f', '//filesrver/eggs http://webserver1/python_eggs http://webserver2/python_eggs, 'myproject==trunk-99'] 
setuptools.command.easy_install.main(myargs) 

Es scheint ganz gut zu funktionieren, wenn ich keine find-Links-Option bieten (f) (in diesem Fall ist es nur nimmt die Ausfälle von distutils.cfg), wenn ich versuche, eine zusätzliche find-Links, um die Option zu geben alles, was ich bekommen:

Traceback (most recent call last): 
    File 
"D:\workspace\pythonscripts_trunk\javapy_egg\Scripts\test_javapy.py", 
line 20, in ? 
result = pyproxy.requireEgg(eggspec , True, hosts) 
File 
"d:\workspace\pythonscripts_trunk\javapy_egg\src\calyon\javapy\pyproxy.py", line 141, in requireEgg 
pkg_resources.require(eggname) 
File "d:\python24\lib\site-packages\setuptools-0.6c9-py2.4.egg\pkg_resources. 
py", line 626, in require 
needed = self.resolve(parse_requirements(requirements)) 
File "d:\python24\lib\site-packages\setuptools-0.6c9-py2.4.egg\pkg_resources.py", line 524, in resolve 
raise DistributionNotFound(req) # XXX put more info here 
pkg_resources.DistributionNotFound: myproject==trunk-99 

jemand die richtige Art und Weise bestätigen kann, dies zu tun? Zum Beispiel verwende ich Windows oder UNIX Schrägstriche in den Argumenten? Welches Zeichen muss verwendet werden, um mehrere URLs zu trennen?

Ich bin mit Setuptools 0.6c9 auf Windows32

Antwort

3

Zitat:

myargs = ['-vv', '-m', '-a', '-f', '//filesrver/eggs http://webserver1/python_eggs http://webserver2/python_eggs, 'myproject==trunk-99'] 

setuptools.command.easy_install.main(myargs) 

Das erste Problem, das ich mit diesem zu sehen ist, dass Sie am Ende Ihrer Liste der Server einen Apostroph sind vermisst

Außerdem ist es im Allgemeinen eine gute Idee, jede URL mit doppelten Anführungszeichen zu umgeben, um sicherzustellen, dass sie jeweils als ein einzelnes Element interpretiert werden.

Ich bin mir nicht sicher, was Sie mit diesem Argument tun 'myproject==trunk-99', aber die Art, wie Sie es oben geschrieben haben, easy_install interpretiert es als Paketname (see the documentation).

Wahrscheinlich möchten Sie die myproject== löschen, da sie nur nach dem Projektnamen sucht, nicht nach einem Booleschen oder Schlüsselwortargument.

Auch ich glaube, Sie wollten das -v Argument anstelle der nicht existenten -vv verwenden.

Sie hatten ein Leerzeichen verwendet, um Ihre Liste von URLs/Servern zu trennen. Vorwärts-Schrägstriche funktionieren sowohl unter Unix als auch unter Windows.

So etwas sollte für Sie arbeiten:

myargs = ['-v', '-m', '-a', '-f', '"//filesrver/eggs/" "http://webserver1/python_eggs/" "http://webserver2/python_eggs/"', 'trunk-99'] 
setuptools.command.easy_install.main(myargs) 
+0

Das Zitat war ein cut & paste Fehler - das eigentliche Programm nicht, dass Fehler hatte. –

Verwandte Themen