0

我想使用distutils( setup.py) 来安装 python 包(来自本地存储库),这需要来自不同本地存储库的另一个包。由于我缺乏该setup命令的体面文档(我只在 此处此处setup找到了一些示例,被-terms 混淆extras_requireinstall_requiredependency_links此处此处找到),是否有人有完整的setup.py文件来说明如何处理此问题,即distutils处理安装在某些 SVN 存储库中找到的一个包,当我现在安装的主包需要它时?

更详细的解释:我有两个本地 svn(或 git)存储库basicmoduleextendedmodule. 现在我结帐extendedmodule并运行python setup.py install. 该setup.py文件知道extendedmodule需要basicmodule,并自动从存储库下载并安装它(以防它尚未安装)。我该如何解决这个问题setup.py?或者也许还有另一种更好的方法来做到这一点?


编辑:后续问题

根据汤姆的回答,我尝试使用setup.py如下:

from setuptools import setup
setup(
    name = "extralibs",
    version = "0.0.2",
    description = ("Some extra libs."),
    packages=['extralib'],
    install_requires = "basiclib==1.9dev-r1234",
    dependency_links = ["https://source.company.xy/svn/MainDir/SVNDir/basiclib/trunk@20479#egg=basiclib-1.9dev-r1234"]

)

尝试以普通用户身份安装时,出现以下错误:

error: Can't download https://source.company.xy/svn/MainDir/SVNDir/basiclib/trunk@20479: 401 Authorization Required

但是,当我svn使用完全相同的链接进行正常结帐时,它可以工作:

svn co https://source.company.xy/svn/MainDir/SVNDir/basiclib/trunk@20479

有什么建议如何在不更改 svn 存储库的任何配置的情况下解决这个问题?

4

2 回答 2

0

查看这两个问题的答案。他们都给出了具体的例子,说明如何install_requires以及如何dependency_links合作来实现你想要的。

于 2013-03-12T18:22:24.953 回答
0

我认为问题在于您的 svn 客户端已通过身份验证(在 ~/.subversion 目录中的某处缓存领域)您的 distutils http 客户端不知道该怎么做。

Distutils 在依赖链接中支持 svn+http 链接类型。因此,您可以尝试在提供用户名和密码的依赖链接之前添加“svn+”:

dependency_links = ["svn+ https://user:password@source.company.xy/svn/MainDir/SVNDir/basiclib/trunk@20479#egg=basiclib-1.9dev-r1234 "]

出于安全原因,您不应将用户名和密码放在 setup.py 文件中。一种方法是从环境变量或事件中获取身份验证信息,尝试从您的 subversion 配置目录 (~/.subversion) 中获取它

希望有所帮助

于 2013-03-13T08:04:32.297 回答