أدوار الويب والعاملين في Python باستخدام أدوات Python لـ Visual Studio
هام
تم الآن إهمال Cloud Services (كلاسيكي) للعملاء الجدد وسيتم استبعادها في 31 أغسطس 2024 لجميع العملاء. ينبغي أن تستخدم عمليات النشر الجديدة نموذج النشر الجديد القائم على Azure Resource Manager Azure Cloud Services (الدعم الموسع) .
تقدم هذه المقالة نظرة عامة على استخدام ويب Python وأدوار العمال باستخدام Python Tools for Visual Studio. تعرف على كيفية استخدام Visual Studio لإنشاء ونشر خدمة سحابية أساسية تستخدم Python.
المتطلبات الأساسية
- Visual Studio لعام 2013, 2015 أو 2017
- أدوات Python لبرنامج Visual Studio (PTVS)
- أدوات Azure SDK لـ VS 2013 أو
أدوات Azure SDK لـ VS 2015 أو
أدوات Azure SDK لـ VS 2017 - Python 2.7 32-bit أو Python 3.8 32-bit
ملاحظة
لإكمال هذا البرنامج التعليمي، تحتاج إلى حساب Azure. يمكنك تنشيط ميزات المشتركين في Visual Studio أو تسجيل الاشتراك في الإصدار التجريبي.
ما هي مواقع ويب Python وأدوار العاملين؟
يوفر Azure ثلاثة نماذج حساب لتشغيل التطبيقات: ميزة تطبيقات الويب في Azure App Serviceو Azure Virtual Machinesو Azure Cloud Services. جميع النماذج الثلاثة تدعم لغة Python. توفر الخدمات السحابية، التي تتضمن أدوار الويب والعاملين، النظام الأساسي كخدمة (PaaS) . ضمن الخدمة السحابية، يوفر دور الويب خادم ويب مخصص لخدمات معلومات الإنترنت (IIS) لاستضافة تطبيقات الويب الأمامية، بينما يمكن لدور العامل تشغيل مهام غير متزامنة أو طويلة المدى أو دائمة مستقلة عن تفاعل المستخدم أو الإدخال.
لمزيد من المعلومات، راجع ما هي الخدمة السحابية؟.
ملاحظة
هل تبحث عن إنشاء موقع ويب بسيط؟
إذا كان السيناريو الخاص بك يتضمن مجرد واجهة أمامية بسيطة لموقع الويب، ففكر في استخدام ميزة تطبيقات الويب خفيفة الوزن في Azure App Service. يمكنك الترقية بسهولة إلى خدمة السحابة مع نمو موقع الويب الخاص بك وتغيير متطلباتك. راجع مركز مطوري Python للحصول على مقالات تتناول تطوير ميزة تطبيقات الويب في Azure App Service.
إنشاء المشروع
في Visual Studio، يمكنك تحديد Azure Cloud Service في مربع الحوار New Project، ضمن Python.
في معالج Azure Cloud Service، يمكنك إنشاء أدوار جديدة للويب والعاملين.
يأتي قالب دور العامل مع رمز معياري للاتصال بحساب تخزين Azure أو ناقل خدمة Microsoft Azure.
يمكنك إضافة أدوار ويب أو عامل إلى خدمة سحابية موجودة في أي وقت. يمكنك اختيار إضافة مشاريع حالية في الحل الخاص بك، أو إنشاء مشاريع جديدة.
يمكن أن تحتوي خدمتك السحابية على أدوار تم تنفيذها بلغات مختلفة. على سبيل المثال، يمكن أن يكون لديك دور ويب Python يتم تنفيذه باستخدام Django، مع Python، أو بأدوار عامل #C. يمكنك التواصل بسهولة بين الأدوار الخاصة بك باستخدام قوائم انتظار ناقل خدمة Microsoft Azure أو قوائم انتظار التخزين.
قم بتثبيت Python على الخدمة السحابية
تحذير
لا تعمل البرامج النصية للإعداد المثبتة مع Visual Studio (في وقت آخر تحديث لهذه المقالة). يصف هذا القسم حلًا.
المشكلة الرئيسية في نصوص الإعداد هي أنها لا تثبت python. أولًا، حدد startup tasks في ملف ServiceDefinition.csdef . تقوم المهمة الأولى (PrepPython.ps1) بتنزيل وتثبيت وقت تشغيل Python. تقوم المهمة الثانية (PipInstaller.ps1) بتشغيل pip لتثبيت أي تبعيات قد تكون لديك.
تمت كتابة البرامج النصية التالية لاستهداف Python 3.8. إذا كنت تريد استخدام الإصدار 2.x من python، فاضبط الملف المتغير PYTHON2 على on لمهمتي بدء التشغيل ووقت التشغيل: <Variable name="PYTHON2" value="<mark>on</mark>" />
.
<Startup>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
</Startup>
يجب إضافة متغيري PYTHON2 وPYPATH إلى مهمة بدء تشغيل العامل. يتم استخدام المتغير PYPATH فقط إذا تم تعيين المتغير PYTHON2 على on.
<Runtime>
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
<Variable name="PYPATH" value="%SystemDrive%\Python27" />
</Environment>
<EntryPoint>
<ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
نموذج ServiceDefinition.csdef
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureCloudServicePython" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WorkerRole name="WorkerRole1" vmsize="Small">
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
<Setting name="Python2" />
</ConfigurationSettings>
<Startup>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PrepPython.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
<Task executionContext="elevated" taskType="simple" commandLine="bin\ps.cmd PipInstaller.ps1">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
</Environment>
</Task>
</Startup>
<Runtime>
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
<Variable name="PYTHON2" value="off" />
<Variable name="PYPATH" value="%SystemDrive%\Python27" />
</Environment>
<EntryPoint>
<ProgramEntryPoint commandLine="bin\ps.cmd LaunchWorker.ps1" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
</WorkerRole>
</ServiceDefinition>
بعد ذلك، أنشئ ملفي PrepPython.ps1 وPipInstaller.ps1 في المجلد ./ bin لدورك.
PrepPython.ps1
يقوم هذا البرنامج النصي بتثبيت Python. إذا تم تعيين متغير البيئة PYTHON2 على on، فسيتم تثبيت Python 2.7، وإلا فسيتم تثبيت Python 3.8.
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated){
Write-Output "Checking if Python is installed...$nl"
if ($is_python2) {
& "${env:SystemDrive}\Python27\python.exe" -V | Out-Null
}
else {
py -V | Out-Null
}
if (-not $?) {
$url = "https://www.python.org/ftp/python/3.8.8/python-3.8.8-amd64.exe"
$outFile = "${env:TEMP}\python-3.8.8-amd64.exe"
if ($is_python2) {
$url = "https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi"
$outFile = "${env:TEMP}\python-2.7.18.amd64.msi"
}
Write-Output "Not found, downloading $url to $outFile$nl"
Invoke-WebRequest $url -OutFile $outFile
Write-Output "Installing$nl"
if ($is_python2) {
Start-Process msiexec.exe -ArgumentList "/q", "/i", "$outFile", "ALLUSERS=1" -Wait
}
else {
Start-Process "$outFile" -ArgumentList "/quiet", "InstallAllUsers=1" -Wait
}
Write-Output "Done$nl"
}
else {
Write-Output "Already installed"
}
}
PipInstaller.ps1
يستدعي هذا النص البرمجي النقطة ويقوم بتثبيت جميع التبعيات في ملف requirements.txt . إذا تم تعيين متغير البيئة PYTHON2 على on، فسيتم استخدام Python 2.7، وإلا فسيتم استخدام Python 3.8.
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated){
Write-Output "Checking if requirements.txt exists$nl"
if (Test-Path ..\requirements.txt) {
Write-Output "Found. Processing pip$nl"
if ($is_python2) {
& "${env:SystemDrive}\Python27\python.exe" -m pip install -r ..\requirements.txt
}
else {
py -m pip install -r ..\requirements.txt
}
Write-Output "Done$nl"
}
else {
Write-Output "Not found$nl"
}
}
Modify LaunchWorker.ps1
ملاحظة
في حالة مشروع دور العامل، يكون ملف LauncherWorker.ps1 مطلوبًا لتنفيذ ملف بدء التشغيل. في مشروع دور الويب، يتم تحديد ملف بدء التشغيل بدلًا من ذلك في خصائص المشروع.
تم إنشاء bin \ LaunchWorker.ps1 في الأصل للقيام بالكثير من الأعمال التحضيرية ولكنها لا تعمل حقًا. استبدل محتويات هذا الملف بالنص التالي.
يستدعي هذا البرنامج النصي ملف worker.py من مشروع Python الخاص بك. إذا تم تعيين متغير البيئة PYTHON2 على on، فسيتم استخدام Python 2.7، وإلا فسيتم استخدام Python 3.8.
$is_emulated = $env:EMULATED -eq "true"
$is_python2 = $env:PYTHON2 -eq "on"
$nl = [Environment]::NewLine
if (-not $is_emulated)
{
Write-Output "Running worker.py$nl"
if ($is_python2) {
cd..
iex "$env:PYPATH\python.exe worker.py"
}
else {
cd..
iex "py worker.py"
}
}
else
{
Write-Output "Running (EMULATED) worker.py$nl"
# Customize to your local dev environment
if ($is_python2) {
cd..
iex "$env:PYPATH\python.exe worker.py"
}
else {
cd..
iex "py worker.py"
}
}
ps.cmd
يجب أن تكون قوالب Visual Studio قد أنشأت ملف ps.cmd في المجلد ./ bin . يستدعي هذا البرنامج النصي shell البرامج النصية لتضمين برنامج PowerShell أعلاه ويوفر التسجيل بناءً على اسم الغلاف المسمى PowerShell. إذا لم يتم إنشاء هذا الملف، فإليك ما يجب أن يحتويه.
@echo off
cd /D %~dp0
if not exist "%DiagnosticStore%\LogFiles" mkdir "%DiagnosticStore%\LogFiles"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -File %* >> "%DiagnosticStore%\LogFiles\%~n1.txt" 2>> "%DiagnosticStore%\LogFiles\%~n1.err.txt"
شغّل محليًا
إذا قمت بتعيين مشروع الخدمة السحابية كمشروع بدء التشغيل وضغطت على F5، يتم تشغيل الخدمة السحابية في محاكي Azure المحلي.
على الرغم من أن PTVS يدعم التشغيل في المحاكي، إلا إن تصحيح الأخطاء (على سبيل المثال، نقاط التوقف) لا يعمل.
لتصحيح أدوار الويب والعاملين، يمكنك تعيين مشروع الدور كمشروع بدء التشغيل وتصحيحه بدلًا من ذلك. يمكنك أيضًا تعيين عدة مشاريع بدء تشغيل. انقر بزر الماوس الأيمن فوق الحل ثم حدد Set StartUp Projects.
نشر إلى Azure
للنشر، انقر بزر الماوس الأيمن فوق مشروع الخدمة السحابية في الحل ثم حدد Publish.
اتبع المعالج. إذا كنت بحاجة إلى ذلك، فقم بتمكين سطح المكتب البعيد. سطح المكتب البعيد مفيد عندما تحتاج إلى تصحيح شيء ما.
عند الانتهاء من تكوين الإعدادات، انقر فوق Publish.
يظهر بعض التقدم في نافذة الإخراج، ثم سترى نافذة Microsoft Azure Activity Log.
يستغرق النشر عدة دقائق حتى يكتمل، ثم يتم تشغيل أدوار الويب و/أو العاملين على Azure!
التحقيق في السجلات
بعد بدء تشغيل الجهاز الظاهري للخدمة السحابية وتثبيته Python، يمكنك إلقاء نظرة على السجلات للعثور على أي رسائل فشل. توجد هذه السجلات في المجلد C:\Resources\Directory\{role}\LogFiles. يحتوي ملفPrepPython.err.txt على خطأ واحد على الأقل من وقت محاولة البرنامج النصي اكتشاف ما إذا كان Python مثبتًا أم لا PipInstaller.err.txt وقد يشكو من نقطة إصدار قديم.
الخطوات التالية
لمزيد من المعلومات التفصيلية حول العمل مع الويب وأدوار العمال في Python Tools لـ Visual Studio، راجع وثائق PTVS:
لمزيد من التفاصيل حول استخدام خدمات Azure من أدوار الويب والعاملين، مثل استخدام Azure Storage أو Service Bus، راجع المقالات التالية:
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ