python程序启动其他python程序_使用docker容器运行Python程序

本文主要阐述基于python镜像和mysql镜像,利用docker容器搭建python3的系统环境,并运行简单的python程序

一.Python镜像的构造文件、Python程序代码

1?? python镜像的python3_dockerfile

#基础镜像

FROM python:3

#作者信息

MAINTAINER lxc

#工作目录

WORKDIR /usr/src/app

#复制文件到容器中

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

COPY . .

ps:由于直接pip速度较慢,这里使用了清华源镜像加速-i https://pypi.tuna.tsinghua.edu.cn/simple

2?? 记录python依赖的文件:requirement.txt

numpy==1.18.4

opencv-python==4.2.0.34

PyMySQL==0.9.3

生成方法:在本机编写代码调试程序后,在python代码所在目录下,使用命令:pip freeze > requirements.txt,即可在该目录下生成requirement.txt文件。(参考链接)

20200519223601861263.png

??

20200519223602093670.png

??

20200519223602239169.png

3?? python程序

①. 简单测试程序HelloWord.py

print("Hello World!")

②. 简单日历显示程序Calander.py

# Filename : test.py

# author by : www.runoob.com

# 引入日历模块

import calendar

# 输入指定年月

yy = int(input("输入年份: "))

mm = int(input("输入月份: "))

# 显示日历

print(calendar.month(yy,mm))

③. 简单数据库操作程序MySql.py

import pymysql

import time

# 打开数据库连接。connec参数依次为"容器IP或虚拟机IP","用户名","密码","数据库名称",字符集编码格式

db = pymysql.connect("localhost", "root", "6666", "user", charset=‘utf8mb4‘ )

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除

cursor.execute("DROP TABLE IF EXISTS myuser")

# 使用预处理语句创建表

sql = """CREATE TABLE myuser (

FIRST_NAME CHAR(20) NOT NULL,

LAST_NAME CHAR(20),

AGE INT,

SEX CHAR(1) )"""

try:

# 执行SQL语句

cursor.execute(sql)

# 提交到数据库执行

db.commit()

except:

# 如果发生错误则回滚

db.rollback()

# 增

sql = "INSERT INTO myuser(FIRST_NAME,LAST_NAME, AGE, SEX) VALUES (%s, %s, %s, %s)"

data = ((‘Xin‘, ‘Lin‘, 23, ‘M‘),(‘Yun‘, ‘Ma‘, 50, ‘M‘))

try:

# 执行多条sql语句

cursor.executemany(sql, data)

# 提交到数据库执行

db.commit()

except:

# 如果发生错误则回滚

db.rollback()

#查

sql = "SELECT * FROM myuser"

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

print("插入数据:")

for row in results:

fname = row[0]

lname = row[1]

age = row[2]

sex = row[3]

# 打印结果

print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))

except:

print ("Error: unable to fetch data")

#改

sql = "UPDATE myuser SET AGE = AGE + 1 WHERE SEX = ‘%c‘" % (‘M‘)

try:

# 执行SQL语句

cursor.execute(sql)

# 提交到数据库执行

db.commit()

except:

# 发生错误时回滚

db.rollback()

#查

sql = "SELECT * FROM myuser"

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

print("修改年龄:")

for row in results:

fname = row[0]

lname = row[1]

age = row[2]

sex = row[3]

# 打印结果

print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))

except:

print ("Error: unable to fetch data")

#查

sql = "SELECT * FROM myuser WHERE AGE = 24"

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

print("删除记录:")

for row in results:

fname = row[0]

lname = row[1]

age = row[2]

sex = row[3]

# 打印结果

print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))

except:

print ("Error: unable to fetch data")

#删

sql = "DELETE FROM myuser WHERE AGE = 24"

try:

# 执行SQL语句

cursor.execute(sql)

# 提交修改

db.commit()

except:

# 发生错误时回滚

db.rollback()

#查

sql = "SELECT * FROM myuser"

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

print("最后结果:")

for row in results:

fname = row[0]

lname = row[1]

age = row[2]

sex = row[3]

# 打印结果

print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))

except:

print ("Error: unable to fetch data")

# 关闭数据库连接

db.close()

④. 简单图像操作程序poenvc.py

import cv2

import numpy as np

img=cv2.imread(‘test.jpg‘)

print(img.shape) #返回图像属性:行数,列数,通道数的元组

print(img.size, img.dtype) # 返回的是图像的数据类型.

block=img[70:120,80:120]

img[0:50,0:40]=block

img=cv2.imshow(‘test‘, img)

cv2.waitKey(0)

参考opencv图像的基本操作中的9.2 获取图像属性、9.3 图像 ROI。

ps:mysql的构建使用的是上一篇博客中构建的mysql(也可以使用mysql官方镜像)

⑤. 文件结构

├── Calander.py

├── HelloWorld.py

├── MySql.py

├── opencv.py

├── python3_dockerfile

├── requirements.txt

└── test.jpg

20200519223602370996.png

二.Python3镜像构建

使用命令:docker build -t python3 -f ./python3_dockerfile .,构建过程如下:

20200519223602446187.png

三.运行测试

1?? 运行HelloWorld.py

命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python HelloWorld.py

结果:

20200519223602573132.png

2?? 运行Calander.py

命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python Calander.py

结果:

20200519223602627816.png

3?? 运行MySql.py

命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python MySql.py

运行时出错:

20200519223602688359.png

错误原因:mysql版本身份验证出现问题引起

解决方法:进入pyhton3容器中安装cryptography,然后commit成镜像(或者在dockerfile中添加cryptography的安装),再运行新的镜像。

具体过程:

①. 使用命令docker run --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp -it python3 bash,交互式启动python3,进入容器:

20200519223602758667.png

②. 在容器中安装cryptography:pip install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple:

20200519223602809445.png

在这里可以直接运行:

20200519223602879753.png

③. commit成镜像,commit命令:docker commit python3_container python3_lxc

20200519223603052593.png

④. 再次运行,运行命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3_lxc python MySql.py

20200519223603107277.png

4?? 运行opencv.py

由于docker中显示图像比较繁琐,这里的图像是在本机跑出来的,运行的时候可以把有关图像显示的内容注释掉或者去掉:

import cv2

import numpy as np

img=cv2.imread(‘test.jpg‘)

print(img.shape) #返回图像属性:行数,列数,通道数的元组

print(img.size, img.dtype) # 返回的是图像的数据类型.

#block=img[70:120,80:120]

#img[0:50,0:40]=block

#img=cv2.imshow(‘test‘, img)

#cv2.waitKey(0)

结果:

20200519223603178562.png

在本机windows系统上运行有关图片显示部分的结果,效果为截取表情包中熊猫人的嘴型放到图片左上角:

20200519223603236175.png

四.小结

这次实践+编写博客花费了大概有5个小时的时间。实践难度不大,主要是围绕python镜像进行简单的环境配置和运行测试。根据教程按部就班,过程很顺畅。做完这次实践,第一是学到了Python requirement文件的创建和使用,体会到了requirement作用:requirement作用是记录python程序依赖包,在镜像构建时通过pip安装requirement中记录的依赖,从而节省了手动下载依赖的繁琐步骤。其次是初步了解了python的opencv,通过一些简单的图片操作体会了opencv的作用。总的来说,一路通畅,收获满满!????

原文地址:https://www.cnblogs.com/lxccccc/p/12919738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值