【问题标题】:pip: Any workaround to avoid --allow-external?pip:有什么办法可以避免 --allow-external?
【发布时间】:2014-05-25 16:57:02
【问题描述】:

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

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

$ pip install --allow-external dirspec MyPackage

当涉及到库打包时,问题就变得更大了。如果我的包是一个库,我还必须告诉依赖于我的包的包的作者,告诉他们的用户通过以下命令安装他们的包:

$ pip install --allow-external dirspec TheirPackage

有什么办法可以避免这种情况吗?

【问题讨论】:

    标签: python pip setuptools pypi


    【解决方案1】:

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

    可能有其他解决方案:要么依靠 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...
    

    【讨论】:

    • --allow-external 不是一种安全解决方法-pip 仍将检查外部下载的校验和与从 pypi 安全获取的校验和。另一方面,如果 OP 要求为 --allow-unverified 提供解决方法,那么它确实会出现安全问题。看到这个问题:stackoverflow.com/q/21021326/42610
    【解决方案2】:

    正确的做法是在您的 tarball 或包含他们和您的项目的大型 tarball 中包含需求。然后 pip 将愉快地从本地文件安装。

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2021-11-22
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      相关资源
      最近更新 更多