我有一些使用Django表单工具的代码(特别是SessionWizardView)。从我所看到的,Formtools似乎在Docker Container之外工作,但在一个内部使用时失败。它正在发挥作用的环境。生产不受影响的Docker容器。
获得的错误消息是(在正在运行的容器的日志中):
from formtools.wizard.views import SessionWizardView ModuleNotFoundError: No module named 'formtools'
**我已经安装了formtools
C:\Users\dgmufasa>pip install django-formtools
Requirement already satisfied: django-formtools in c:\work\software\python64bitv3.6\lib\site-packages
Requirement already satisfied: Django>=1.8 in c:\work\software\python64bitv3.6\lib\site-packages\django-1.11.7-py3.6.egg (from django-formtools)
Requirement already satisfied: pytz in c:\work\software\python64bitv3.6\lib\site-packages\pytz-2017.3-py3.6.egg (from Django>=1.8->django-formtools)
我已将它添加到settings.py文件中的INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
[..snip ..]
'formtools',
]
我已将它用作程序的一部分:
from django.shortcuts import render, render_to_response
from formtools.wizard.views import SessionWizardView
#from django.contrib.formtools.wizard.views import SessionWizardView
from django.contrib.auth.decorators import login_required
[... snip ...]
在这个领域(开发)它一切正常 - 但是 - 当采用完全相同的代码,创建一个Docker文件并将其投入生产时,我得到了错误。
**requirements.txt for Docker build** file
Django==1.11.7
psycopg2
Pillow==4.3.0
bcrypt==3.1.4
cffi==1.11.2
django-formtools
django-phonenumber-field==1.3.0
googlemaps==2.5.1
geocoder==1.33.0
geopy==1.11.0
pandas==0.21.1
在使用requirements.txt的构建期间
Step 6/14 : RUN set -x && pip install -r requirements.txt && apt-get update && apt-get install -y alien wget libaio1 && wget -P /tmp/ http://oss-config-file.oss-cn-beijing.aliyuncs.com/docker-config-file/tools/oracle_client/oracle-instantclient12.2-basiclite-12.2.0.1.0-1.x86_64.rpm && wget -P /tmp/ http://oss-config-file.oss-cn-beijing.aliyuncs.com/docker-config-file/tools/oracle_client/oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm && alien -iv /tmp/oracle-instantclient12.2-basiclite-12.2.0.1.0-1.x86_64.rpm && alien -iv /tmp/oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm && pip3 install cx_Oracle && apt-get purge -y alien perl perl5 wget && apt-get -y autoremove && apt-get clean && rm -rf /tmp/oracle-* && rm -rf /usr/share/docs && rm -rf /usr/share/man
---> Running in 06350c1369d6
[91m+ pip install -r requirements.txt
[0mCollecting Django==1.11.7 (from -r requirements.txt (line 1))
Downloading Django-1.11.7-py2.py3-none-any.whl (6.9MB)
Collecting psycopg2 (from -r requirements.txt (line 2))
Downloading psycopg2-2.7.3.2-cp36-cp36m-manylinux1_x86_64.whl (2.7MB)
Collecting Pillow==4.3.0 (from -r requirements.txt (line 3))
Downloading Pillow-4.3.0-cp36-cp36m-manylinux1_x86_64.whl (5.8MB)
Collecting bcrypt==3.1.4 (from -r requirements.txt (line 4))
Downloading bcrypt-3.1.4-cp36-cp36m-manylinux1_x86_64.whl (54kB)
Collecting cffi==1.11.2 (from -r requirements.txt (line 5))
Downloading cffi-1.11.2-cp36-cp36m-manylinux1_x86_64.whl (419kB)
Collecting django-formtools (from -r requirements.txt (line 6))
Downloading django_formtools-2.1-py2.py3-none-any.whl (132kB)
Collecting django-phonenumber-field==1.3.0 (from -r requirements.txt (line 7))
Downloading django-phonenumber-field-1.3.0.tar.gz
Collecting googlemaps==2.5.1 (from -r requirements.txt (line 8))
Downloading googlemaps-2.5.1.tar.gz
可以看到:收集django-formtools(来自-r requirements.txt(第6行))下载django_formtools-2.1-py2.py3-none-any.whl(132kB)
所以,看起来Docker正在收集它 - 但是 - 在运行代码时,
这是用于启动容器的内容:
docker-compose -f $ FILE_EXTRACTION / docker-compose.yml up --no-deps -d web_work 2>&1
这是导致的错误(来自容器的日志):
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/code/backendworkproj/mainadmin/urls.py", line 2, in <module>
from mainadmin import views
File "/code/backendworkproj/mainadmin/views.py", line 21, in <module>
from formtools.wizard.views import SessionWizardView
ModuleNotFoundError: No module named 'formtools'
为什么会这样?
以下是成功安装的部分:
Successfully built django-phonenumber-field googlemaps olefile pycparser future
Installing collected packages: pytz, Django, psycopg2, olefile, Pillow, six, pycparser, cffi, bcrypt, django-formtools, babel, phonenumberslite, django-phonenumber-field, certifi, urllib3, idna, chardet, requests, googlemaps, click, future, decorator, ratelim, geocoder, geopy, numpy, python-dateutil, pandas
Successfully installed Django-1.11.7 Pillow-4.3.0 babel-2.5.1 bcrypt-3.1.4 certifi-2017.11.5 cffi-1.11.2 chardet-3.0.4 click-6.7 decorator-4.1.2 django-formtools-2.1 django-phonenumber-field-1.3.0 future-0.16.0 geocoder-1.33.0 geopy-1.11.0 googlemaps-2.5.1 idna-2.6 numpy-1.13.3 olefile-0.44 pandas-0.21.1 phonenumberslite-8.8.8 psycopg2-2.7.3.2 pycparser-2.18 python-dateutil-2.6.1 pytz-2017.3 ratelim-0.1.6 requests-2.18.4 six-1.11.0 urllib3-1.22
[91m+ apt-get update
开发机器上的Python(在Windows上)
C:\WORK\AppPython\ContractorsClubBackofficeCode>python --version
Python 3.6.3
Docker正在进行构建的Python(在Linux上)
python --version
Python 2.7.12
我想我可以尝试在Docker构建正在进行的机器上升级Python。你觉得那会有用吗?
似乎Dockerbuild本身使用的是Python 3.6.2
Step 7/14 : ADD . /code/
---> 9b9a1988e8bf
Step 8/14 : COPY *.pth /usr/local/lib/python3.6/site-packages/ <<<<<< using python 3.6???
---> c66a7c622993
Step 9/14 : RUN DATABASE_URL=none python3 /code/backendworkproj/manage.py collectstatic --noinput
---> Running in 048fe0c7144f
[... snip ....]
Copying '/code/backendworkproj/static/images/backendwork/TCC_ICON_FRONT-70.png'
Copying '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/base.css'
Copying '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/changelists.css' <<<<<< using Python 3.6???
Copying '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/rtl.css'
Copying '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/dashboard.css'
Copying '/usr/local/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/login.css'
[... snip ...]
Step 7/14 : ADD . /code/
---> 9b9a1988e8bf
Step 8/14 : COPY *.pth /usr/local/lib/python3.6/site-packages/ <<<<<< using Python 3.6???
---> c66a7c622993
Step 9/14 : RUN DATABASE_URL=none python3 /code/backendworkproj/manage.py collectstatic --noinput
下面是目前正在使用的Dockerfile(虽然,我将python版本更改为3.6.3以查看会发生什么)
FROM python:3.6.2
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN set -x &&\
pip install -r requirements.txt &&\
apt-get update &&\
apt-get install -y alien wget libaio1 &&\
wget -P /tmp/ http://oss-config-file.oss-cn-beijing.aliyuncs.com/docker-config-file/tools/oracle_client/oracle-instantclient12.2-basiclite-12.2.0.1.0-1.x86_64.rpm &&\
wget -P /tmp/ http://oss-config-file.oss-cn-beijing.aliyuncs.com/docker-config-file/tools/oracle_client/oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm &&\
alien -iv /tmp/oracle-instantclient12.2-basiclite-12.2.0.1.0-1.x86_64.rpm &&\
alien -iv /tmp/oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm &&\
pip3 install cx_Oracle &&\
apt-get purge -y alien perl perl5 wget && apt-get -y autoremove && apt-get clean && \
rm -rf /tmp/oracle-* && rm -rf /usr/share/docs && rm -rf /usr/share/manz`
ADD . /code/
COPY *.pth /usr/local/lib/python3.6/site-packages/
另外,是否有一组指令允许人们只需拉动Formtools Git repository
并将其包含为Django app
(在项目中)?再次 - 在开发方面 - 它的工作原理,在生产方(涉及Docker),它没有。使用它作为应用程序的思考可以使用pip install
不...
当您在Docker文件中使用pip install
时,您将安装Python 2的软件包。请改用pip3
。
pip3 install -r requirements.txt
我认为你不需要COPY *.path
线。一旦用pip3
安装了所有需求,site-packages
目录应包含它所需的一切。