擅长:python、mysql、java
<p>pip的工作原理有一些细微差别。不幸的是,使用<code> prefix vendor</code>来存储项目的所有依赖项,如果这些依赖项或依赖项的任何依赖项被安装到pip可以找到它们的地方,那么就不能使用这些依赖项。它将跳过这些依赖项,只将其余部分安装到<code>vendor</code>文件夹中。在</p>
<p>过去我曾使用virtualenv的<code> no-site-packages</code>选项来解决这个问题。在一家公司,我们将发布整个virtualenv,其中包括python二进制文件。为了只提供依赖项,您可以结合使用virtualenv和pip上的<code> prefix</code>开关,为自己提供一个干净的环境,并将其安装到正确的位置。在</p>
<p>我将提供一个示例脚本,该脚本创建一个临时virtualenv,激活它,然后将依赖项安装到本地<code>vendor</code>文件夹中。如果在CI中运行,这很方便。在</p>
<pre><code>#!/bin/bash
tempdir=$(mktemp -d -t project.XXX) # create a temporary directory
trap "rm -rf $tempdir" EXIT # ensure it is cleaned up
# create the virtualenv and exclude packages outside of it
virtualenv python=$(which python2.7) no-site-packages $tempdir/venv
# activate the virtualenv
source $tempdir/venv/bin/activate
# install the dependencies as above
pip install -r requirements.txt prefix=vendor
</code></pre>