2009-03-18 4 views
1

Je dois appeler easy_install en fonction d'installer des œufs Python à partir d'un groupe de serveurs. Précisément ce que j'installe et où je les obtenir est déterminé lors de l'exécution: Par exemple les serveurs que j'utilise dépend de l'emplacement géographique de l'ordinateur.Quelle est la bonne façon d'ajouter des liens supplémentaires FIND-à easy_install lorsqu'il est appelé en fonction?

Puisque je ne peux pas garantir que tout serveur unique sera toujours disponible, il a été décidé que mon script a besoin de vérifier un certain nombre de serveurs. Certains sites ont un filtrage web prohibitif, je dois donc vérifier un chemin UNC. D'autres endroits me demandent de vérifier un mélange, comme dans cet exemple:

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

Il semble fonctionner très bien quand je ne fournis pas une option FIND-liens (-f) (dans ce cas, il ramasse tout le par défaut de distutils.cfg), lorsque je tente de spécifier une découverte des liens supplémentaires l'option tout ce que je reçois est:

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 

quelqu'un peut-elle confirmer la bonne façon de le faire? Par exemple dois-je utiliser Windows ou UNIX barres obliques dans les arguments? Quel caractère doit être utilisé pour séparer plusieurs URL?

J'utilise setuptools 0.6c9 sur Windows32

Répondre

3

Quote:

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

setuptools.command.easy_install.main(myargs) 

Ce premier problème que je vois est que vous manquez une seule citation sur la fin de votre liste de serveurs

De même, il est généralement recommandé d'entourer chaque URL de guillemets afin de s'assurer qu'ils sont tous interprétés comme un seul élément.

Je ne suis pas sûr de ce que vous faites avec cet argument 'myproject==trunk-99', mais la façon dont vous l'avez écrit ci-dessus, easy_install interprète comme un nom de package (see the documentation).

Vous voulez probablement laisser tomber le myproject== car il est à la recherche que pour le nom du projet, pas un argument booléen ou mot-clé.

Aussi, je pense que vous vouliez utiliser l'argument -v au lieu de l'inexistant -vv.

Vous avez eu raison d'utiliser un espace pour séparer votre liste d'URL/serveurs. Les barres obliques vont fonctionner à la fois sur Unix et Windows.

Quelque chose comme cela devrait fonctionner pour vous:

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

La citation a été une erreur de coupe et coller - le programme réel n'a pas eu ce bug. –

Questions connexes