在Docker容器中运行和调试Python条形码应用程序
#编程 #python #docker #containers

使用CPYTHON和DYNAMSOFT条形码读取器创建Python条形码扩展时,您必须面对的主要问题之一是测试与不同版本的Python的代码兼容性。

要测试窗户,linux或macOS中的Python条形码扩展,您将需要在计算机上安装每个版本的Python。但是,这很耗时。

在这里,我们为您提供了一个简单的黑客攻击!您可以使用Docker容器,而不是安装所有这些Python版本。

使用Python条形码SDK创建Docker Image

首先,下载Docker桌面并安装它。

如果您的系统没有Python 3.8,请转到Docker Hub并拔出包含Python 3.8的Docker Image。现在调用命令提示符的命令:

docker run -it --rm python:3.8 bash

如果不存在Docker映像,则上面给出的命令本身将触发下载。

Create Docker Image

接下来,您可以创建一个Dockerfile来创建一个新的Docker映像,其中包括Dynamsoft Barcode Reader SDK

FROM python:3.8
RUN pip install dbr

生成docker映像:

docker build --rm -t yushulx/dynamsoft-barcode-reader:python-3.8

进一步运行容器测试。它将帮助您验证您是否基于Python的DynamSoft条形码读取器工作正常。

docker run -it --rm yushulx/dynamsoft-barcode-reader:python-3.8

Validate Python Code

接下来,您需要在验证容器后将Docker图像发布到Docker Hub:

docker login
docker push yushulx/dynamsoft-barcode-reader:python-3.8

您可以访问以下给定链接以测试图像:

https://hub.docker.com/repository/docker/yushulx/dynamsoft-barcode-reader.

将本地文件夹安装到Docker容器

要将本地窗口文件夹安装到Linux Docker容器中,请使用Python 3.8执行Python脚本。

之后,从Docker桌面的设置中选择共享驱动器:

Docker Shared Device

将Windows文件夹安装到Linux容器中,执行以下命令:

docker run -it --rm -v d:/code/docker:/dynamsoft yushulx/dynamsoft-barcode-reader:python-3.8 bash

Execute Linux Command

如何使用Visual Studio代码遥控范围调试Python代码

编写和调试Python代码的首选选项是使用Visual Studio代码。

首先安装VSCODE的Docker扩展名,如下所示:

VSCode Extention

单击F1键以执行运行容器选项的附件。

Running Container

在项目文件夹上双击。

Docker Project

Python Project

它将允许您在VSCODE中编辑Python文件。接下来,安装用于容器的Python调试器进行调试:

Install Python Debugger

要远程调试代码,请单击F5。

Code Debug

Python Debug
完整的Python条形码检测代码如下:

import os 


from dbr import DynamsoftBarcodeReader 

dbr = DynamsoftBarcodeReader() 




def InitLicense(license): 

    dbr.InitLicense(license) 




def DecodeFile(fileName): 

    try: 

        results = dbr.DecodeFile(fileName) 

        textResults = results["TextResults"] 

        resultsLength = len(textResults) 

        print("count: " + str(resultsLength)) 

        if resultsLength != 0: 

            for textResult in textResults: 

                print(textResult["BarcodeFormatString"]) 

                print(textResult["BarcodeText"]) 

                localizationResult = textResult["LocalizationResult"] 

                x1 = localizationResult["X1"] 

                y1 = localizationResult["Y1"] 

                x2 = localizationResult["X2"] 

                y2 = localizationResult["Y2"] 

                x3 = localizationResult["X3"] 

                y3 = localizationResult["Y3"] 

                x4 = localizationResult["X4"] 

                y4 = localizationResult["Y4"] 

                localizationPoints = [(x1,y1),(x2,y2),(x3,y3),(x4,y4)] 

                print(localizationPoints) 

        else : 

            print("No barcode detected") 

    except Exception as err: 

        print(err) 




if __name__ == "__main__": 

    # Get the license from https://www.dynamsoft.com/customer/license/trialLicense/ 

    licenseKey = "DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ=="  

    fileName = r"test.jpg" 

    InitLicense(licenseKey) 

    dir_path = os.path.dirname(os.path.realpath(__file__)) 

    DecodeFile(os.path.join(dir_path, fileName))