<p>这个问题的标题感觉有点像<a href="https://en.wikipedia.org/wiki/XY_problem" rel="nofollow noreferrer">XY problem</a>的例子。如果你能详细说明你想要实现的目标以及你的限制条件,我们可能会给你一个更好的答案</p>
<p>也就是说,中华民国关于管理自己的包装索引并只使用它的建议是一个很好的建议。我还想到了其他一些想法:</p>
<ul>
<li><p><strong>更新</strong>:结果是<a href="https://github.com/pypa/pip/issues/8439" rel="nofollow noreferrer">pip may run distributions other than those in the constraints file</a>,因此这种方法可能被认为是不安全的。此外<a href="https://github.com/pypa/pip/issues/9644" rel="nofollow noreferrer">hashes are kind of broken</a>关于pip的最新版本</p>
<p>使用带有散列的约束文件。假设您已在名为<code>requirements.in</code>的文件中记录了依赖项,则可以使用类似<code>pip-tools</code>的<code>pip-compile generate-hashes</code>生成此文件。然后您可以安装像<code>pip install -c requirements.txt some_package</code>这样的软件包</p>
<ul>
<li>Pro:可能安装的内容将与VCS中的代码一起记录</李>
<li>缺点:控制第一次下载的内容不是很复杂就是很费力</李>
<li>缺点:散列检查可能很慢</李>
<li>缺点:与不使用哈希时相比,您遇到问题的频率更高。有些人可以在其他人不能的情况下工作;例如,不可能将-e file://`之类的约束与哈希组合</李>
</ul>
</li>
<li><p>使用另一种打包工具,如pipenv。它的工作原理与前面的建议类似</p>
<ul>
<li>优点:易于使用</li>
<li>缺点:如果工作流程不适合自然情况,则很难将其集成到您的工作流程中</李>
</ul>
</li>
<li><p>在当地管理包裹。包和依赖项可以像<code>pip download dest some_dir some_package</code>一样下载,也可以像<code>pip install no-index find-links some_dir</code>一样安装</p>
<ul>
<li>赞成:如果您跟踪VCS(例如git lfs)中的工件,那么可以在代码旁边记录可能安装的内容</李>
<li>缺点:要么所有的软件包都下载了,要么没有</李>
</ul>
</li>
<li><p>使用密封的构建系统。我知道bazel将此作为一项功能进行宣传,但对裤子和巴克等其他功能不太确定</p>
<ul>
<li>赞成:如果你想控制你的构建,这可能是最终的解决方案</李>
<li>缺点:不能很好地与开源python生态系统afaik集成</李>
<li>缺点:开销很大</李>
</ul>
</li>
</ul>
<p><a href="https://en.wikipedia.org/wiki/XY_problem" rel="nofollow noreferrer">1</a>:<a href="https://en.wikipedia.org/wiki/XY_proble" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/XY_proble</a></p>