【发布时间】:2018-10-11 11:50:24
【问题描述】:
我习惯于使用pip 将 Python 包安装到我的 Django 项目的虚拟环境中。
当我在本地使用 Divio Docker 项目时,这不起作用。
【问题讨论】:
我习惯于使用pip 将 Python 包安装到我的 Django 项目的虚拟环境中。
当我在本地使用 Divio Docker 项目时,这不起作用。
【问题讨论】:
将 Python 包安装到 Docker 项目时需要注意两点:
下面的细节描述了使用 Divio 项目,但原理与其他 Docker 安装类似。
要在命令行上使用pip 将Python 包安装到Dockerised 项目中,您需要在Docker 环境中使用pip,即容器内。
仅仅在您可以访问项目文件的目录中是不够的。在这方面,它类似于使用虚拟环境 - 您需要激活 virtualenv 。 (否则,您的包将不会安装在虚拟环境中,而是安装在您自己的主机环境中。)
要激活虚拟环境,您需要在其上运行 source bin/activate 之类的东西。
在 Divio web 容器中安装软件包:
# start a bash prompt inside the project
docker-compose run --rm web bash
# install the package in the usual way
pip install rsa
rsa 现在已安装并可使用。
然而,到目前为止,该软件包只能在该特定容器中安装和使用。一旦退出 bash shell,容器就会消失。下次您启动 web 容器时,您将不会在那里找到 rsa 包。那是因为容器每次都是从它的 image 启动的。
为了保持安装包,您需要将它包含在映像中。
Divio 项目包含一个 requirements.in 文件,其中列出了将包含在映像中的 Python 包。
在该文件的末尾添加一个包含rsa 的新行。然后运行:
docker-compose build web
这将重建 Docker 映像。下次您使用(例如)docker-compose run --rm web bash 启动容器时,它将包含该 Python 包。
(Divio Developer Handbook has some additional guidance on using pip.)
注意:我是 Divio 团队的成员。这个问题是我们经常通过我们的支持渠道看到的一个问题。
【讨论】: