腾讯云函数python部署记录
选择上传压缩包
压缩包会被解压在src目录下
假设上传的代码包为coze.zip
依赖包有两种处理方式
- 直接打包在代码包内
在函数管理那块,直接在控制台手动安装
cd src/coze && pip3.10 install -r requirements.txt -t .
需要修改文件 scf_bootstrap
cd coze && python3.10 app.py 压缩包会被解压在src目录下
假设上传的代码包为coze.zip
在函数管理那块,直接在控制台手动安装
cd src/coze && pip3.10 install -r requirements.txt -t . 需要修改文件 scf_bootstrap
cd coze && python3.10 app.py pip install django_apschedulersettings.py
INSTALLED_APPS = [
# ...
'django_apscheduler',
# ...
]app为应用目录
app下新建 scheduler.py
import time
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_job, register_events
import logging
print('django-apscheduler')
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)
def job2(name):
# 具体要执行的代码
print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))
# 实例化调度器
scheduler = BackgroundScheduler()
# 调度器使用DjangoJobStore()
# 持久化会报错 注释掉
# scheduler.add_jobstore(DjangoJobStore(), "default")
# 添加任务1
# 每隔5s执行这个任务
@register_job(scheduler,"interval", seconds=5,args=['王路'],id='job1')
def job1(name):
# 具体要执行的代码
print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))
scheduler.add_job(job2,"interval",seconds=10,args=['王飞'],id="job2")
# 监控任务
register_events(scheduler)
# 调度器开始运行app.apps.py修改
from django.apps import AppConfig
from django.conf import settings
class AppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app'
# 新增
def ready(self):
if settings.SCHEDULER_AUTOSTART:
from .scheduler import scheduler
scheduler.start() 新建 run.py
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
sys.argv = ['manage.py', 'runserver', '127.0.0.1:8001'] # 指定默认运行的命令
main()
安装pyinstall
pip install pyinstaller 命令参考
执行命令
pyinstaller -F --name=run run.py --specpath . # 使用scratch作为基础镜像
FROM scratch
WORKDIR /app
# 复制本地编译好的应用程序到容器中
# GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./bin/main main.go
COPY ./bin/main /app/main
# 复制配置文件和其他必要的文件到容器中
#COPY ./config.toml /app/config.toml
# 复制时区数据文件到容器中 需要把时区文件先复制到项目下
COPY ./zoneinfo/Asia/Shanghai /etc/localtime
# 设置时区环境变量
ENV TZ=Asia/Shanghai
# 运行应用程序
ENTRYPOINT ["/app/main", "-conf", "/app/config.toml"] package server
import (
"embed"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)
//go:embed static
var static embed.FS
func main() {
r := gin.Default()
// 创建一个没有顶层目录的FS
webFS, err := fs.Sub(static, "static")
if err != nil {
panic(err)
}
r.NoRoute(gin.WrapH(http.FileServer(http.FS(webFS))))
log.Fatal(r.Run(":8080")
}