在谷歌云中找不到Mysql模块

问题描述 投票:0回答:1

我在通过谷歌云连接到Python Flask应用程序中的mysql时遇到问题。

我的应用程序在本地运行。我在

localhost
上运行该应用程序,提交一个 Web 表单,并将内容上传到我在 AWS 上运行的 mysql 数据库。

对于

DB_HOST
DB_PASS
等,我将它们放在
.env
文件中,然后将它们与其他包一起加载,如

from flask import Flask, render_tempalate, request
from jinja1 import Environment, FileSystemLoader
import os 
from dotenv import load_dotenv 
import mysql.connector

load_dotenv() 

当我尝试通过

gcloud app deploy
将应用程序上传到谷歌云时,它给了我错误

   from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'
[2024-01-22 15:17:50 +0000] [9] [INFO] Worker exiting (pid: 9)
[2024-01-22 15:17:50 +0000] [1] [INFO] Shutting down: Master
[2024-01-22 15:17:50 +0000] [1] [INFO] Reason: Worker failed to boot.

我注释掉了

from dotenv...
load_dotenv()
,并将MySQL连接的环境变量存储在谷歌云本身中。现在我的导入看起来像这样

from flask import Flask, render_tempalate, request
from jinja1 import Environment, FileSystemLoader
import os 
# from dotenv import load_dotenv 
import mysql.connector

# load_dotenv() 

我将应用程序重新部署到谷歌云,然后收到此错误

...
    import mysql.connector
ModuleNotFoundError: No module named 'mysql'
...

我很困惑,因为我在谷歌云为我创建的

mysql
文件夹中有一个
env
包。我通过谷歌云上的一个简单的网络教程开始了这个项目。

另外,当我运行

pip install mysql-connector-python
时它会返回

Requirement already satisfied: mysql-connector-python in c:\users\me\appdata\local\programs\python\python312\lib\site-packages (8.3.0)

我在谷歌云上研究了MySQL,它使用了很多

sqlalchemy
,尽管我对此并不熟悉,如果可能的话,我更愿意使用
mysql.connector

我将数据库称为

dataBase = mysql.connector.connect(
    host=os.environ['DB_HOST'], 
    ...

然后

def saveData(args)
    query = "..."
    vals = (...)
    cursorObject = dataBase.cursor() 
    cursorObject.execute(query, vals) 
    ...

我的

app.yaml
文件是

runtime: python 
env: flex 
entrypoint: gunicorn -b :$PORT main:app 

runtime_config: 
   operating_system: ubuntu22

manual_scaling:
  instance: 1 
resources: 
  cpu: 1 
  memory_gb: 0.5 
  disk_size_gb: 10

我的

.gitignore
文件是

.env 
.env*local

我的

requirements.txt

Flask==3.0.0; python_version > '3.6'
Flask==2.3.3; python_version < '3.7'
Werkzeug==3.0.1; python_version > '3.6'
Werkzeug==2.3.7; python_version < '3.7'
gunicorn==20.1.0

我的

gcloud
版本是

Google Cloud SDK 460.0.0
bq 2.0.101
core 2021.01.12
gcloud-crc32c 1.0.0
gsutil 5.27

我的目录结构是

myproject
|
|--env
|   |
|   +--Include
|   +--Lib
|   |   |
|   |   +site-packages
|   |        |...
|   |        +--mysql
|   |
|   +--Scripts
|   +--pyvenv.cfg
|
|--static
|--templates
|--.env 
|--.flaskenv 
|--.gitignore
|--app.yaml
|--main.py
|--requirements.txt

无论如何,感谢您的帮助。

python flask google-cloud-platform mysql-connector
1个回答
0
投票

我意识到我需要更新

requirements.txt
。这就是将软件包安装在与我自己的系统不同的系统上的原因。

现在我的

requirements.txt

Flask==3.0.0; python_version > '3.6'
Flask==2.3.3; python_version < '3.7'
Werkzeug==3.0.1; python_version > '3.6'
Werkzeug==2.3.7; python_version < '3.7'
gunicorn==20.1.0
mysql-connector-python==8.3.0
python-dotenv==1.0.1

并且我取消了

from dotenv import load_dotenv
load_dotenv()
的注释。我的完整导入声明是

from flask import Flask, render_template, request
from jinja2 import Environment, FileSystemLoader
import os
from dotenv import load_dotenv
import mysql.connector

我的

pyvenv.cfg
文件是

home = C:\Python310
include-system-site-packages = false
version = 3.10.7

现在可以了!

© www.soinside.com 2019 - 2024. All rights reserved.