最近的版本 pip
除非用户明确提供,否则安装程序尚未安装不将其包文件上载到PyPI的软件包 --allow-external
选项 (相关答案)。
我想分发依赖于这样的库的包 dirspec。目前我必须通过以下命令告诉用户我的软件包安装我的软件包:
$ pip install --allow-external dirspec MyPackage
在图书馆包装方面,它变得更加成问题。如果我的包是一个库,我还必须告诉作者依赖我的包来告诉用户通过以下命令安装他们的包:
$ pip install --allow-external dirspec TheirPackage
是否有任何解决方法可以避免这种情况?
正确的做法是在你的tarball或包含他们的项目和你的项目的大型tarball中包含需求。然后pip将很乐意从本地文件安装。
您正在询问安全功能的解决方法。在我不知情的情况下从外部站点安装可能被视为有害。
可能有另一种解决方案:要么依赖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...
正确的做法是在你的tarball或包含他们的项目和你的项目的大型tarball中包含需求。然后pip将很乐意从本地文件安装。
您正在询问安全功能的解决方法。在我不知情的情况下从外部站点安装可能被视为有害。
可能有另一种解决方案:要么依赖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...