pip: 有没有方法可以避免--allow-external?
最近版本的 pip
安装工具不会自动安装那些没有把包文件上传到 PyPI 的软件包,除非用户明确提供 --allow-external
这个选项(相关回答)。
我想要发布一个依赖于这样的库的包,比如 dirspec。目前,我必须告诉我的包的用户通过以下命令来安装我的包:
$ pip install --allow-external dirspec MyPackage
当涉及到库的打包时,这就变得更加麻烦。如果我的包是一个库,我还得告诉依赖于我的包的其他包的作者,让他们的用户通过以下命令来安装他们的包:
$ pip install --allow-external dirspec TheirPackage
有没有什么办法可以避免这种情况呢?
2 个回答
6
你在问如何绕过一个安全功能。从外部网站安装东西而不告诉我,这可能会被认为是有害的。
可能有其他解决办法:要么让pip报错,告诉你需要的包无法找到,要么在你的安装代码中给出这样的指示。不过,第二种方法会失败,如果你真的声明了依赖这个包,因为pip会先尝试安装外部的那个包,这样就没机会让你的setup.py说话了。你需要让你的包不依赖于它,并在setup.py中打印出一个指示,告诉用户从外部网站安装某个包。这听起来更复杂。
我认为,像这种依赖外部包的情况会越来越普遍,所以pip会提供足够的提示,告诉你如何解决这种依赖问题。
补充:用当前版本的pip(1.5.4)测试安装时,发现有这样的提示,建议使用一个开关 --use-external。
$ 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...
5
正确的做法是把需求文件放在你的压缩包里,或者放在一个包含你自己项目和其他项目的超级压缩包里。这样,pip就可以很顺利地从本地文件中安装这些依赖了。