如何使setup.py安装一个不同的模块

时间:2013-03-12 18:03:05

标签: python python-2.7 package setuptools

我想使用distutilssetup.py)来安装python包(来自本地存储库),这需要来自不同本地存储库的另一个包。由于我缺乏setup命令的正确文档(我只找到了一些例子  herehere混淆了setup - 条款extras_requireinstall_requiredependency_links找到herehere ),有没有人有一个完整的setup.py文件,显示如何处理,即distutils处理在某些SVN存储库中找到的软件包的安装,当我正在安装的主软件包现在需要那?

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


编辑:后续问题

根据Tom的回答,我尝试使用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存储库的任何配置的情况下解决此问题的任何建议?

2 个答案:

答案 0 :(得分:0)

查看这两个问题的答案。他们都提供了有关install_requiresdependency_links如何协同工作以实现目标的具体示例。

答案 1 :(得分: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)

希望有帮助