Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在UWSGI中未找到烧瓶模块_Python 3.x_Docker_Flask_Uwsgi - Fatal编程技术网

Python 3.x 在UWSGI中未找到烧瓶模块

Python 3.x 在UWSGI中未找到烧瓶模块,python-3.x,docker,flask,uwsgi,Python 3.x,Docker,Flask,Uwsgi,我正在运行一个docker容器来承载一个flask应用程序,docker文件如下 FROM python:3.7.7-alpine3.11 ENV FLASK_APP api.app:app RUN apk add --no-cache mariadb-dev RUN apk add --no-cache gcc musl-dev RUN apk add --no-cache uwsgi-python3 uwsgi-http bash RUN adduser -D api USER api

我正在运行一个docker容器来承载一个flask应用程序,docker文件如下

FROM python:3.7.7-alpine3.11

ENV FLASK_APP api.app:app

RUN apk add --no-cache mariadb-dev
RUN apk add --no-cache gcc musl-dev 
RUN apk add --no-cache uwsgi-python3 uwsgi-http bash
RUN adduser -D api
USER api

SHELL [ "/bin/bash", "-c" ]

WORKDIR /home/api

COPY . .
RUN python -m venv venv
RUN venv/bin/pip install -r requirements/requirements.txt
RUN venv/bin/pip install .


# run-time configuration
EXPOSE 5000
ENTRYPOINT [ "./boot.sh" ]
exec uwsgi --plugins http,python3 --http :5000 -b 32768 --http-keepalive --thunder-lock --manage-script-name --mount /=myapp.app:app --lazy-apps --die-on-term -H venv
boot.sh的代码如下所示

FROM python:3.7.7-alpine3.11

ENV FLASK_APP api.app:app

RUN apk add --no-cache mariadb-dev
RUN apk add --no-cache gcc musl-dev 
RUN apk add --no-cache uwsgi-python3 uwsgi-http bash
RUN adduser -D api
USER api

SHELL [ "/bin/bash", "-c" ]

WORKDIR /home/api

COPY . .
RUN python -m venv venv
RUN venv/bin/pip install -r requirements/requirements.txt
RUN venv/bin/pip install .


# run-time configuration
EXPOSE 5000
ENTRYPOINT [ "./boot.sh" ]
exec uwsgi --plugins http,python3 --http :5000 -b 32768 --http-keepalive --thunder-lock --manage-script-name --mount /=myapp.app:app --lazy-apps --die-on-term -H venv
容器在运行时出错

我输入容器(在boot.sh中运行一些其他命令以保持容器正常运行)
docker exec-it sh
试着运行上面的命令,它会给我下面的错误

Traceback (most recent call last):
  File "./query_api/app.py", line 2, in <module>
    from flask import Flask, jsonify
ModuleNotFoundError: No module named 'flask'
unable to load app 0 (mountpoint='/') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
Python version: 3.8.2 (default, Feb 29 2020, 17:03:31)  [GCC 9.2.0]
!!! Python Home is not a directory: root/test !!!
Set PythonHome to root/test
Python path configuration:
  PYTHONHOME = 'home/venv'
  PYTHONPATH = '/home/venv'
  program name = 'home/venv/bin/python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = '/home/api/home/venv/bin/python'
  sys.base_prefix = 'home/venv'
  sys.base_exec_prefix = 'home/venv'
  sys.executable = '/home/api/home/venv/bin/python'
  sys.prefix = 'home/venv'
  sys.exec_prefix = 'home/venv'
  sys.path = [
    'home/venv/lib/python38.zip',
    'home/venv/lib/python3.8',
    'home/venv/lib/python3.8/lib-dynload',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f8034d60d48 (most recent call first):
<no Python frame>
我在某处读到我们必须提供蟒蛇

导出PYTHONPATH=/home/api/venv/
然后当我执行uwsgi命令时,我得到以下错误

Traceback (most recent call last):
  File "./query_api/app.py", line 2, in <module>
    from flask import Flask, jsonify
ModuleNotFoundError: No module named 'flask'
unable to load app 0 (mountpoint='/') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
Python version: 3.8.2 (default, Feb 29 2020, 17:03:31)  [GCC 9.2.0]
!!! Python Home is not a directory: root/test !!!
Set PythonHome to root/test
Python path configuration:
  PYTHONHOME = 'home/venv'
  PYTHONPATH = '/home/venv'
  program name = 'home/venv/bin/python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = '/home/api/home/venv/bin/python'
  sys.base_prefix = 'home/venv'
  sys.base_exec_prefix = 'home/venv'
  sys.executable = '/home/api/home/venv/bin/python'
  sys.prefix = 'home/venv'
  sys.exec_prefix = 'home/venv'
  sys.path = [
    'home/venv/lib/python38.zip',
    'home/venv/lib/python3.8',
    'home/venv/lib/python3.8/lib-dynload',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f8034d60d48 (most recent call first):
<no Python frame>
app.py包含一个简单的hello world程序。
在过去的两天里,我一直在为调试flask和uwsgi而努力。非常感谢您的帮助。

您为什么要在Docker内部使用
virtualenv
?对我来说,这似乎是一种反模式。您可以使用
virtualenv
将依赖项与其他应用程序或系统本身隔离开来,这与使用Docker实现的功能相同。也许如果你简化你的Dockerfile,你可能会解决你的问题。嗨,Stefan,谢谢。但我正在尝试复制我同事的一个项目,对他来说,设置(旧的阿尔卑斯版本)运行良好。不过,我会尝试不使用虚拟环境,并让您知道。然而,根据我的理解,同样的问题也可能发生在本地机器虚拟环境中。我同意,同样的问题也可能发生在本地开发过程中。通常,使用Docker(我将以python为例)时的开发过程是使用
virtualenv
在本地开发应用程序,确保一切正常。之后,使用本地开发期间使用的相同命令对应用程序进行容器化,但在本例中不使用
virutalenv
,因为这只是开销。最后,当您确定容器的所有功能都能正常工作时,您就可以优化映像了。我在没有docker的本地linux系统上进行了尝试,但仍然得到了相同的问题威尔,这将是一个flask/python问题。:)为什么在Docker内部使用
virtualenv
?对我来说,这似乎是一种反模式。您可以使用
virtualenv
将依赖项与其他应用程序或系统本身隔离开来,这与使用Docker实现的功能相同。也许如果你简化你的Dockerfile,你可能会解决你的问题。嗨,Stefan,谢谢。但我正在尝试复制我同事的一个项目,对他来说,设置(旧的阿尔卑斯版本)运行良好。不过,我会尝试不使用虚拟环境,并让您知道。然而,根据我的理解,同样的问题也可能发生在本地机器虚拟环境中。我同意,同样的问题也可能发生在本地开发过程中。通常,使用Docker(我将以python为例)时的开发过程是使用
virtualenv
在本地开发应用程序,确保一切正常。之后,使用本地开发期间使用的相同命令对应用程序进行容器化,但在本例中不使用
virutalenv
,因为这只是开销。最后,当您确定容器的所有功能都能正常工作时,您就可以优化映像了。我在没有docker的本地linux系统上进行了尝试,但仍然得到了相同的问题威尔,这将是一个flask/python问题。:)