pip:要避免的任何解决方法--allow-external?

时间:2014-04-11 13:37:50

标签: python pip setuptools pypi

最新版本的pip安装程序尚未安装不会将其包文件上传到PyPI的软件包,除非用户明确提供--allow-external选项(related answer)。

我想分发依赖于dirspec这样的库的我的包。目前,我必须通过以下命令告诉用户我的软件包安装我的软件包:

$ pip install --allow-external dirspec MyPackage

在图书馆包装方面,问题变得更加严重。如果我的包是一个库,我还必须告诉作者依赖我的包来告诉他们的用户通过以下命令安装他们的包:

$ pip install --allow-external dirspec TheirPackage

是否有任何解决方法可以避免这种情况?

2 个答案:

答案 0 :(得分:6)

您要求安全功能的解决方法。在我不知情的情况下从外部站点安装可能被认为是有害的。

可能有另一种解决方案:要么依赖pip抱怨没有该开关就无法访问所需的包,要么尝试从安装代码中提供这样的指令。但是,第二种方法会失败,如果你真的声明对这种包的依赖,因为pip会先尝试安装外部的,因此不会让你的setup.py有机会说什么。你必须让你的包独立于它,并从setup.py打印出从外部站点安装一些包的说明。这听起来更复杂。

我认为,这种情况(取决于外部包)将足够流行,pip会关注提供足够的指导性提示如何解决这种依赖。

编辑:使用当前版本的pip(1.5.4)进行的测试安装显示,有这样的提示建议使用开关 - 使用外部打印。

$ pip install gitlle
Downloading/unpacking gittle
.....
Downloading/unpacking mimer (from gittle)
  Could not find any downloads that satisfy the requirement mimer (from gittle)
  Some externally hosted files were ignored (use --allow-external mimer to allow).
Cleaning up...

答案 1 :(得分:5)

正确的做法是在tarball或包含项目和你的项目的大型tarball中包含要求。然后pip将很乐意从本地文件安装。