如何安装私有Python包作为构建的一部分

时间:2015-04-29 04:35:25

标签: python docker pip git-submodules

我刚刚创建了一个相当大的私有python包。我想将它作为我在Docker容器中的应用程序的构建过程的一部分安装(虽然这不是那么重要)。包源非常大,所以理想情况下我不会下载/保留整个源代码。

现在,我一直在和我的应用程序一起传递包源,但这是笨拙的,希望是暂时的。什么是更好的方式? git子模块/子树?我对此很陌生。

5 个答案:

答案 0 :(得分:9)

如果您将github与私人仓库一起使用,则必须创建SSH部署密钥并将私钥添加到应用程序文件夹中以进行构建。

pip install git+git://github.com/myuser/foo.git@v123

或者,您可以将pip-cache文件夹从主机安装到容器中,并从该文件夹执行pip install。您必须将python包保存在缓存目录中。

pip install --no-index --find-links=/my/pip-cache/

您可以使用以下命令将python包安装到此pip-cache:

pre pip 9.0.1:

pip install --download pip-cache/ package1 package2

点9.0.1+(thx评论@James Hiew):

pip install download pip-cache/ package1 package2

答案 1 :(得分:6)

您可以设置OAuth令牌here in Github并使用命令

pip install git+https://<your_oauth_token>:x-oauth-basic@github.com/myuser/foo.git

更多文档here

答案 2 :(得分:1)

我将它放在一个单独的私人仓库中,然后使用pip将其作为要求安装:

pip install git+git://github.com/myuser/foo.git@v123

答案 3 :(得分:0)

如果您不想使用ssh密钥,请使用http和令牌身份验证,但您不希望在您的仓库中公开您的令牌,我建议将令牌作为环境变量传递。

添加到您的Dockerfile:

ENV GITOKEN "$GITOKEN"
RUN bash -c "pip install -r <(envsubst < requirements.txt)"

将您的要求设置为:

+plotly==2.7.0
+git+https://$GITOKEN@github.com/githubuser/your_package.git@master

答案 4 :(得分:0)

当您有一个requirements.txt文件并且想要在Dockerfile中执行pip install -r requirements.txt时,我要做的是:

  • 创建一个GITHUB_TOKEN环境变量。将其放入.env
  • 将其添加为docker-compose.yml文件中的ARG
  • 在安装pip软件包之前:
RUN git config --global url."https://${GITHUB_OAUTH_TOKEN}@github.com/".insteadOf "https://github.com/"

这可以修补来自requirements.txt的所有URL