如何在docker compose项目(DJANGO)的Pipfile中添加额外的python包



大家好,希望你们做得很好。我想在这个问题开始时先说,在以正确的方式设置项目时,我是一个真正的新手。现在我正在和一个朋友一起开发Django应用程序,他已经在web开发方面有了更多的经验,他已经用Docker compose设置了一切,也就是说,我们有Django的应用程序容器,MySQL,Celery,RabbitMQ等。

现在,我正在我们项目的后端工作,需要向应用程序容器的包列表中添加一个新包:Smart Open。问题是,我不知道该怎么做。我在Windows上,使用Git Bash启动docker compose容器。我尝试的是打开web应用程序容器的bash,并尝试从那里用pipenv安装模块,但速度非常慢,这使得Pipfile更新超时:

$ winpty docker exec -it whs_webapp_1 bash
root@96caa176d252:/app/my_app_name# pipenv install smart_open[s3]
Creating a virtualenv for this project…
Using /usr/local/bin/python3.9 (3.9.6) to create virtualenv…
⠋Running virtualenv with interpreter /usr/local/bin/python3.9
Using base prefix '/usr/local'
/usr/lib/python3/dist-packages/virtualenv.py:1090: DeprecationWarning: the imp m
import imp
New python executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM/bi
Also creating executable in /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing setuptools, pkg_resources, pip, wheel...done.
Virtualenv location: /root/.local/share/virtualenvs/my_app-NMSbRsZM
Installing smart_open[s3]…
Collecting smart_open[s3]
Using cached smart_open-5.1.0-py3-none-any.whl (57 kB)
Collecting boto3
Downloading boto3-1.18.10-py3-none-any.whl (131 kB)
Collecting botocore<1.22.0,>=1.21.10
Downloading botocore-1.21.10-py3-none-any.whl (7.8 MB)
Collecting s3transfer<0.6.0,>=0.5.0
Downloading s3transfer-0.5.0-py3-none-any.whl (79 kB)
Collecting jmespath<1.0.0,>=0.7.1
Using cached jmespath-0.10.0-py2.py3-none-any.whl (24 kB)
Collecting python-dateutil<3.0.0,>=2.1
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting urllib3<1.27,>=1.25.4
Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Collecting six>=1.5
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, urllib3, python-dateutil, jmespath, botocore
Successfully installed boto3-1.18.10 botocore-1.21.10 jmespath-0.10.0 python-dat
Adding smart_open[s3] to Pipfile's [packages]…
Pipfile.lock (acbafc) out of date, updating to (9b92f3)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
items())[0][1]
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/resolver.py", lin
return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
return {
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
self._get_file_hash(candidate.location)
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/patched/piptools/repositories/pypi
for chunk in iter(lambda: fp.read(8096), b""):
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
flush_decoder = True
File "/usr/local/lib/python3.9/contextlib.py", line 135, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/lib/python3/dist-packages/pipenv/vendor/pip9/_vendor/requests/packa
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip9._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnect

这个命令运行了大约两个小时,直到timout事件发生。有人能向我解释一下我是如何正确添加这个新包的吗?我可以分享我们的docker配置,但我不确定什么可能有用。基本上,向pipfile添加额外的包并相应地更新pipfile.lock的正确方法是什么?

提前感谢您的帮助。我在互联网上搜索过,但大多数指南似乎无法与我们的配置进行比较,所以我尽可能地感到困惑。

您的项目目录是否包含docker-compose.yml、Dockerfile和requirements.txt文件?如果是这样,那么以下步骤可能会有所帮助。

打开requirements.txt。您应该会看到这里列出的所有python项目依赖项。例如,最初可能是这样的:

Django==3.1.5
djangorestframework==3.12.2

将智能打开添加为一个需求,使您的requirements.txt看起来像:

Django==3.1.5
djangorestframework==3.12.2
smart-open

现在,为了用这个新包更新您的映像,您需要重建映像。这通常是这样做的:

docker-compose up --build

注意:上面的命令将重新创建原始映像,但安装了smart-open,然后将使用此映像启动一个名为whs_webapp_1的容器。

要确认包已经安装,您可以通过运行以下命令强行进入容器,然后打开一个python交互式终端:

docker exec -it whs_webapp_1 bash 
python (or python3)

并测试您的包是否可以导入。

最新更新