1

我需要调用 easy_install 作为从一堆服务器安装一些 Python 鸡蛋的函数。确切地说,我安装什么以及从哪里获取它是在运行时确定的:例如,我使用哪些服务器取决于计算机的地理位置。

由于我不能保证任何单个服务器始终可用,因此决定我的脚本需要检查多个服务器。有些地方有禁止的网络过滤,所以我需要检查一个 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?

我在 Windows32 上使用 setuptools 0.6c9

4

1 回答 1

3

引用:

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 )
于 2009-03-24T20:04:42.437 回答