What’s the proper way to pip install a package with Git dependencies that might be private?
两个选项
>像你一样使用dependency_links。详见下文。
>在setup.py的dependency_link中,使用一个特殊的dependency-links.txt来收集所有必需的包。然后在require.txt中添加这个包。这是我的推荐选项,如下所述。
# dependency-links.txt
git+ssh://...@tag#egg=package-name1
git+ssh://...@tag#egg=package-name2
# requirements.txt (per deployed application)
-r dependency-links.txt
虽然选项2对包管理增加了一些额外的负担,即保持dependency-links.txt是最新的,但它使得安装包更容易,因为您可以忘记在pip安装上添加–process-dependency-link选项。
也许更重要的是,使用dependency-links.txt,您可以指定要在部署中安装的确切版本,这是您希望在CI / CD环境中所需要的 – 与安装某些版本相比,没有任何风险更大。从包维护者的角度来看,通常并认为很好的做法是指定最低版本,例如
# setup.py in a package
...
install_requires = [ 'foo>1.0', ... ]
这很棒,因为它使您的软件包与其他具有类似依赖关系但可能在不同版本上的软件包运行良好。但是,在部署的应用程序中,如果程序包之间存在冲突的要求,则仍可能导致混乱。例如。软件包A与foo> 1.0一致,软件包B想要foo = 1.5,最新版本是foo == 2.0。使用dependency-links.txt可以具体说明,为所有软件包应用一个版本:
# dependency-links.txt
foo==1.5
The command fails when it looks for some-git-dependency,
为了使其工作,您需要添加–process-dependency-links以进行点识别,以识别对github的依赖性,例如
pip install --process-dependency-links -r private-requirements.txt
注意自pip 8.1.0以来,您可以将此选项添加到requires.txt中。在不利的地方,它适用于所有安装的软件包,并可能产生意想不到的后果。也就是说,我发现使用dependency-links.txt是一个更安全和更易于管理的解决方案。
All of these Git dependencies may be private
有三个选项:
>在每个必需软件包的存储库中添加协作者。这些协作者需要使用github设置他们的ssh密钥才能工作。然后用git ssh:// …>将部署密钥添加到每个存储库。这里的缺点是您需要将相应的私钥分发到所有需要部署的机器上。再次使用git ssh:// …>在拥有私有存储库的github帐户上添加个人访问令牌。然后,您可以使用git https://accesstoken@github.com / …不利之处在于访问令牌将读取对相应github帐户上的所有公共和私有存储库的写访问权限。在正面方面,不再需要分发和管理每个存储库的私钥,并且循环密钥要简单得多。在一个全面的环境中,每个开发人员都可以访问所有的存储库,我发现这是所有人最有效率,最轻松的方式。因人而异