Каков правильный способ добавить дополнительные ссылки поиска в easy_install при вызове как функции?
-
20-08-2019 - |
Вопрос
Мне нужно вызвать easy_install как функцию, чтобы установить несколько Python eggs с нескольких серверов.Именно то, что я устанавливаю и откуда я это беру, определяется во время выполнения:Например, какие серверы я использую, зависит от географического положения компьютера.
Поскольку я не могу гарантировать, что какой-либо один сервер всегда будет доступен, было решено, что моему скрипту необходимо проверить несколько серверов.В некоторых местоположениях запрещена веб-фильтрация, поэтому мне нужно проверить UNC-путь.В других местах мне требуется проверить сочетание, как в этом примере:
myargs = ['-vv', '-m', '-a', '-f', '//filesrver/eggs http://webserver1/python_eggs http://webserver2/python_eggs, 'myproject==trunk-99']
setuptools.command.easy_install.main( myargs )
Кажется, он работает просто отлично, когда я не предоставляю опцию find-links (-f) (в этом случае он просто выбирает значения по умолчанию из distutils.cfg), когда я пытаюсь указать дополнительную опцию find-links, все, что я получаю, это:
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
Кто-нибудь может подтвердить правильный способ сделать это?Например, использую ли я Косые черты Windows или UNIX в аргументах?Какой символ должен использоваться для разделения нескольких URL-адресов?
Я использую setuptools 0.6c9 в Windows32
Решение
Цитата:
myargs = ['-vv', '-m', '-a', '-f', '//filesrver/eggs http://webserver1/python_eggs http://webserver2/python_eggs, 'myproject==trunk-99']
setuptools.command.easy_install.main( myargs )
Первая проблема, с которой я сталкиваюсь, заключается в том, что вам не хватает одной кавычки в конце вашего списка серверов для просмотра.
Кроме того, обычно рекомендуется заключать каждый URL-адрес в двойные кавычки, чтобы убедиться, что каждый из них интерпретируется как отдельный элемент.
Я не уверен, что вы делаете с этим аргументом 'myproject==trunk-99'
, но, как вы написали выше, easy_install интерпретирует это как имя пакета (смотрите документацию).
Вы, вероятно, хотите отказаться от myproject==
поскольку он ищет только название проекта, а не логический аргумент или ключевое слово.
Кроме того, я думаю, вы имели в виду использовать -v
аргумент вместо несуществующего -vv
.
Вы были правы, использовав пробел для разделения вашего списка URL-адресов / серверов.Косая черта будет работать как в Unix, так и в Windows.
Что-то подобное должно сработать для вас:
myargs = ['-v', '-m', '-a', '-f', '"//filesrver/eggs/" "http://webserver1/python_eggs/" "http://webserver2/python_eggs/"', 'trunk-99']
setuptools.command.easy_install.main( myargs )