สำหรับการแปลงรหัส Python2 ถึง Python3 Python & Django เวอร์ชันใดเหมาะสมที่สุด?


11

ขณะนี้ฉันทำงานใน บริษัท ใหญ่ที่เราจำเป็นต้องแปลง pango2 โครงการใหญ่เก่า Django เป็น python3 ดังนั้นฉันได้ทำการวิจัยมากมายที่เกี่ยวข้อง แต่ก็ยังไม่สามารถหาคำตอบที่สมบูรณ์แบบที่เกี่ยวข้องกับเวอร์ชันของ Python และ Django ที่เหมาะสมที่สุดสำหรับการแปลง

ปัจจุบันฉันใช้ Python: 2.7.16 และ Django: 1.9.13 ในรุ่นเก่าของฉัน

ทุกคนสามารถแนะนำฉันให้เป็นรุ่นที่เหมาะสมที่สุดของ Python & Django สำหรับรุ่นเก่าที่เหนือกว่าสำหรับการแปลง python2 เป็น python3


python3 เวอร์ชันปัจจุบันคือ Python 3.8 และ Django เวอร์ชันล่าสุดคือ Django 3.0 เว็บไซต์ของ Django แนะนำ python 3 เวอร์ชันล่าสุดคือ 3.8 มีเหตุผลบางอย่างที่ทำให้คุณไม่ต้องการเร่งทั้ง python และ django ให้เป็นเวอร์ชั่นล่าสุดหรือไม่?
ชายเสื้อคลุมสีเขียว

2
โดยทั่วไปฉันเพิ่งรู้เมื่อไม่กี่วันที่ผ่านมาว่าเว็บไซต์ที่ใช้ Django ซึ่งฉันดูแลรักษามาหลายปีแล้วตอนนี้ทำงานบนเซิร์ฟเวอร์ที่โฮสต์โดยใช้ python2.7 ในขณะที่ฉันใช้งานในเครื่องโดยใช้ python3 7 ข้อแตกต่างเดียวที่ฉันพบคือเมื่อฉันพยายามใช้ f-strings บางแห่งเป็นครั้งแรกและเวอร์ชันของเว็บเซิร์ฟเวอร์ล้มเหลว มิฉะนั้นจะใช้งานตามที่คาดไว้ (เหมือนกัน) ในพื้นที่และระยะไกลเพื่อวัตถุประสงค์ในการทดสอบและเพิ่มคุณสมบัติ ข้อสรุปโดยสังเขปของฉันทั้งหมดคือ Django โดยทั่วไปเข้ากันได้กับทุกสิ่ง
ชายเสื้อคลุมสีเขียว

1
สำหรับเวอร์ชั่นล่าสุดฉันพบว่าบางคนไม่แนะนำเพราะในเวอร์ชั่นล่าสุดหากมีปัญหาใด ๆ ที่เกี่ยวข้องกับการอัพเดทใหม่แล้วมันจะยากที่จะหาทางแก้ไขบางครั้งดังนั้นในโครงการปัจจุบันฉันไม่ต้องการเสี่ยงเช่นนั้น & การทดสอบจุดประสงค์ฉันเริ่มแปลงโครงการของฉันเป็น python 3.7.3 เวอร์ชันล่าสุดด้วย django ล่าสุดและพบปัญหา 30 ประเภทแล้ว
จันทร์

ควรสังเกต - คำถามนี้เกิดขึ้นในการตรวจสอบการตรวจสอบสำหรับฉัน "มีเอกสารหรือการอ้างอิงใด ๆ " ชัดเจนมากนอกหัวข้อ (ขอทรัพยากรนอกสถานที่) อย่างไรก็ตามฉันเชื่อว่าคำถามสามารถแก้ไขได้ซึ่งจะนำไปสู่คำตอบที่ได้รับการยอมรับด้านล่างได้ดียิ่งขึ้น
theMayer

คำตอบ:


3

ฉันคิดว่าฉันจะเพิ่มกลยุทธ์ที่สนับสนุนโดยคำตอบของ Wim - รับรุ่นที่เหมาะสมของ Django ที่ทำงานทั้ง 2.7 และ 3.x ก่อน - และร่างกลยุทธ์บางอย่างที่เหมาะกับฉัน

Python 2.7 เป็นพ็อดการหลบหนีของคุณจนกว่าคุณจะดึงทริกเกอร์บน 3.x

  • การทดสอบของคุณควรทำงานทั้งสองอย่าง
  • อย่าใช้คุณสมบัติเฉพาะ 3.x เช่น f-strings
  • Python 3.x ตัวแรกจากนั้นต่อมา Django 2.x ซึ่งไม่ได้ทำงานบน 2.7
  • เริ่มเร็วอย่าวิเคราะห์มากเกินไป แต่หลีกเลี่ยงวิธีบิ๊กแบง
    • ไฟล์โดยไฟล์ที่แรก
    • เริ่มต้นด้วยรหัสระดับต่ำสุดเช่นไลบรารียูทิลิตี้ที่คุณมีห้องชุดทดสอบ
    • ถ้าเป็นไปได้พยายามค่อยๆรวมการเปลี่ยนแปลงของคุณเข้ากับสาขาการผลิต 2.7 และทำให้รหัสการย้ายพอร์ต 3.x เป็นปัจจุบันด้วยการเปลี่ยนแปลงที่เกิดขึ้น

เวอร์ชันไหนของ Django ที่จะเริ่มด้วย

เกณฑ์ของฉันในที่นี้คือการโยกย้าย Django สามารถมีส่วนร่วมได้อย่างเป็นธรรม (และต้องการการคิดมากกว่า 2 => 3 งาน) ดังนั้นฉันจะย้ายไปที่ล่าสุดและที่ยิ่งใหญ่ที่สุด 1.11 วิธีที่คุณให้คุณค่ากับผู้ใช้ 2.7 ของคุณอยู่แล้ว อาจมีความเข้ากันได้ pre-2.x ที่ดีในวันที่ 1.11 และคุณจะได้รับคำเตือนที่ 2.x

Python 3.x รุ่นรองรุ่นใดที่จะเริ่มต้นด้วย

ที่ดีที่สุดที่จะต้องพิจารณาทุกมุมเช่นความพร้อมใช้งานของ libs บุคคลที่สามการสนับสนุนจากชุด CI / devops ของคุณและความพร้อมใช้งานบนอิมเมจเซิร์ฟเวอร์ OS ที่คุณเลือก คุณสามารถติดตั้ง 3.8 และลองติดตั้ง pip ของ requirements.txt ของคุณด้วยตัวเองตัวอย่างเช่น

Leverage คอมไพล์ (หรืออะไรก็ตามที่คุณใช้ SCM) และvirtualenv

  • แยกrequirement.txtไฟล์ แต่ ...
  • ถ้าคุณมีไฟล์ตาม repo คอมไพล์คุณสามารถชี้แต่ละ venv ที่codeline เดียวกันpip install -e <your directory>กับ นั่นหมายความว่าใน 2 เทอร์มินัลต่าง ๆ คุณสามารถรัน 2.7 และ 3.x เทียบกับ unittest เดียวกัน
  • คุณสามารถเรียกใช้เซิร์ฟเวอร์ Django 2.7 และ 3.x เคียงข้างกันบนพอร์ตที่แตกต่างกันและชี้ว่า Firefox และ Chrome อยู่ด้วย
  • กระทำอย่างสม่ำเสมอ ( อย่างน้อยก็ในสาขาการย้าย) และเรียนรู้เกี่ยวกับgis bisect

ใช้ประโยชน์จาก2to3

ใช่มันจะทำลายรหัส 2.7 และ Django ถ้าคุณปล่อยให้มัน ดังนั้น...

  • รันในโหมดดูตัวอย่างหรือต่อไฟล์เดียว ดูสิ่งที่มันแตก แต่ยังเห็นสิ่งที่ถูกต้อง

  • เค้นไปที่การแปลงบางอย่างที่ไม่ทำลาย 2.7 หรือ Django print x=> print (x)และexcept(Exception) as eเป็น 2 เกมง่ายๆ

นี่คือคำสั่งที่ควบคุมปริมาณของฉันดูเหมือน:

2to3 $tgt -w -f except -f raise -f next -f funcattrs -f print
  • เรียกใช้ไฟล์ต่อไฟล์จนกว่าคุณจะมั่นใจจริงๆ

ใช้sedหรือawkแทนการแก้ไขของคุณสำหรับการแปลงจำนวนมาก

ข้อดีคือเมื่อคุณตระหนักถึงข้อกังวลเฉพาะของแอพมากขึ้นคุณสามารถสร้างชุดการเปลี่ยนแปลงที่สามารถเรียกใช้บนไฟล์ 1 ไฟล์หรือไฟล์จำนวนมากและทำงานส่วนใหญ่โดยไม่ทำลาย 2.7 หรือ Django สมัครตำแหน่งนี้หลังจากที่คุณเหมาะสม-ผ่อนคันเร่ง2to3ผ่าน สิ่งนี้ทำให้คุณมีการสะสางเหลืออยู่ในเครื่องมือแก้ไขและทำการทดสอบให้ผ่าน

(เป็นทางเลือก) เริ่มรันสีดำบนโค้ด 2.7

black ซึ่งเป็นตัวจัดรูปแบบโค้ดใช้ Python 3 AST เพื่อเรียกใช้การวิเคราะห์ ไม่พยายามเรียกใช้รหัส แต่จะตั้งค่าสถานะข้อผิดพลาดทางไวยากรณ์ที่ป้องกันไม่ให้เข้าสู่ขั้นตอน AST คุณจะต้องทำงาน pip ติดตั้งเวทย์มนตร์ระดับโลกเพื่อไปที่นั่นและคุณจะต้องซื้อเพื่อประโยชน์ของคนผิวดำ

คนอื่นทำได้ - เรียนรู้จากพวกเขา

การฟัง# 155 ขั้นตอนปฏิบัติสำหรับการย้ายไปยัง Python 3ควรให้แนวคิดบางอย่างเกี่ยวกับการทำงาน ดูลิงค์แสดงมัน พวกเขาชอบพูดถึงการย้าย Instagram (?) ซึ่งเกี่ยวข้องกับการปรับการรัน 2.7 รหัสเป็น 3.x ซินแท็คซ์บน codebase ทั่วไปและในสาขา git เดียวกันจนถึงวันดึง

ดูคู่มือการย้ายพอร์ตแบบอนุรักษ์นิยม Python 3

และInstagram ทำให้การย้ายราบรื่นไปยัง Python 3 - The New Stack

ข้อสรุป

เวลาของคุณไปยัง Django 1.11 EOL (เมษายน 2563) ค่อนข้างสั้นดังนั้นหากคุณมีทรัพยากร 2+ ตัวที่จะขว้างมันฉันจะลองทำสิ่งต่อไปนี้ควบคู่กัน:

  • DEV # 1: เริ่มจาก Django 1.11 bump (ทฤษฎีที่ว่า Django 1.11 นั้นน่าจะอยู่ในตำแหน่งที่ดีที่สุดในการกระโดดออกจาก Django 2.x) โดยใช้ 2.7

  • DEV # 2: เริ่มต้นใช้งาน Python 3.6 / 3.7 ของรหัสยูทิลิตี้ที่ไม่ใช่ Django ของคุณ เนื่องจากรหัสนี้เข้ากันได้กับ 2.7 ในตอนนี้ให้รวมเป็น # 1 ตามที่คุณไป

ดูว่าทั้งสองงานดำเนินการอย่างไรประเมินความเสี่ยงของโครงการ Django และความเจ็บปวดของ Python 3 คุณหายไปจาก Python 2.7 EOL แล้ว แต่เว็บเฟรมเวิร์กที่ล้าสมัยนั้นอาจเป็นอันตรายมากกว่า Python 2.7 รุ่นเก่าอย่างน้อยสองสามเดือน ดังนั้นฉันจะไม่รอนานเกินไปที่จะเริ่มย้ายออกจาก Django 1.9 และงานของคุณจะไม่สูญเปล่า เมื่อคุณเห็นความคืบหน้าคุณจะเริ่มเห็นความเสี่ยงของโครงการดีขึ้น

ความคืบหน้า 2to3 เริ่มต้นของคุณจะช้า แต่เครื่องมือและคำแนะนำนั้นดีพอที่คุณจะรับความเร็วได้อย่างรวดเร็วดังนั้นอย่าคิดมากก่อนที่จะเริ่มรวบรวมประสบการณ์ ด้าน Django ขึ้นอยู่กับการเปิดเผยของคุณต่อการเปลี่ยนแปลงในกรอบซึ่งเป็นสาเหตุที่ฉันคิดว่ามันเป็นการเริ่มต้นที่ดีที่สุด

ป.ล. (ความเห็นแย้ง / ความเห็นส่วนตัว) ฉันไม่ได้ใช้ห้องสมุดบริดจ์แบบ 2 ต่อ 3 จาก6หรืออื่น ๆ อีกมาก

มันไม่ได้เพราะผมไม่ไว้วางใจได้ - มันยอดเยี่ยมสำหรับ libs บุคคลที่ 3 - แต่ที่ฉันไม่ได้ต้องการที่จะเพิ่มการพึ่งพาถาวรที่ซับซ้อน (และผมขี้เกียจเกินไปที่จะอ่านเอกสารของมัน) ฉันเขียนโค้ด 2.7 ในไวยากรณ์ที่เข้ากันได้ 3.x เป็นเวลานานดังนั้นฉันจึงไม่รู้สึกว่าจำเป็นต้องใช้มัน ไมล์สะสมของคุณอาจแตกต่างกันและไม่ได้กำหนดไว้ในเส้นทางนี้หากดูเหมือนว่าจะทำงานได้มาก

แต่ฉันสร้างpy223.py (57 LOC รวมถึงความคิดเห็น) ด้วยเนื้อหาประเภทนี้ซึ่งส่วนใหญ่เกี่ยวข้องกับวิธีแก้ไขปัญหาสำหรับการคัดค้านและการเปลี่ยนชื่อในไลบรารีมาตรฐาน

try:
    basestring_ = basestring
except (NameError,) as e:
    basestring_ = str

try:
    cmp_ = cmp
except (NameError,) as e:
    # from http://portingguide.readthedocs.io/en/latest/comparisons.html
    def cmp_(x, y):
        """
        Replacement for built-in function cmp that was removed in Python 3
        """
        return (x > y) - (x < y)

จากนั้นนำเข้าจาก py223 นั้นเพื่อแก้ไขข้อกังวลเฉพาะเหล่านั้น หลังจากนั้นฉันจะทิ้งการนำเข้าและย้ายสิ่งแปลก ๆisinstance(x, basestr_)ไปisinstance(x, str)แต่ฉันรู้ล่วงหน้าว่ามีอะไรต้องกังวลน้อยมาก


คำปรึกษาที่ดี. เพียงหนึ่งบันทึก Django นั้นใช้sixสำหรับเลเยอร์ความเข้ากันได้แล้วดังนั้นหากคุณต้องการใช้ในโครงการ Django ในช่วงการเปลี่ยนภาพนี่ไม่ใช่ "เพิ่มการพึ่งพาถาวรที่ซับซ้อน"
Wim

@wim ฉันเห็นด้วยกับคุณอีกครั้ง หก แต่ขึ้นอยู่กับมุมมอง ฉันได้ตั้งข้อสังเกตแล้วว่ามันมาพร้อมกับ libs ของบุคคลที่สามดังนั้นจึงไม่มี "ราคา" ในแง่ของข้อกำหนดและการพึ่งพาโดยรวม แต่ฉัน - อาจผิด - คิดว่ามันเป็นกล่องดำขนาดใหญ่/ หูดอยู่ตรงกลางของรหัสของฉัน หากสิ่งที่คุณทำคือการทดสอบสตริง / unicode / basestring และถ้าคุณรู้วิธีที่จะทำด้วยตัวเองคุณก็จะรู้ได้อย่างชัดเจนว่าจะสำรองส่วนที่เหลือไว้เมื่อใด ฉันจะย้ายไปยังจุดสิ้นสุดแม้ว่า
JL Peyret

มันpip install -e ...เป็นตัวพิมพ์เล็ก-eใช่ไหม
thebjorn

มันอาจจะเป็น จะถูกต้อง
JL Peyret

3

ข้อเสนอแนะของฉันคืออัพเกรดเป็นรุ่นแรกDjango==1.11.26ซึ่งเป็นรุ่นล่าสุดของ Django ที่รองรับทั้ง Python 2 และ Python 3 อยู่ใน Python 2.7 เวอร์ชันปัจจุบันของคุณทันที

อ่านบันทึกประจำรุ่นอย่างละเอียดสำหรับ 1.10.x และ 1.11.x ตรวจสอบการเลิกใช้และแก้ไขสิ่งที่หยุดทำงานจากรหัส 1.9.x ของคุณ สิ่งที่จะทำลาย Django เคลื่อนไหวเร็ว สำหรับโครงการ Django ขนาดใหญ่อาจมีการเปลี่ยนแปลงรหัสหลายอย่างและหากคุณใช้ปลั๊กอินหรือไลบรารีของบุคคลที่สามจำนวนมากคุณอาจต้องสลับรุ่นของพวกเขาไปรอบ ๆ การอ้างอิงจากบุคคลที่สามบางส่วนของคุณอาจถูกทอดทิ้งอย่างสิ้นเชิงดังนั้นคุณต้องค้นหาการแทนที่หรือลบคุณลักษณะ

หากต้องการค้นหาบันทึกย่อประจำรุ่นสำหรับการอัปเกรดแต่ละรุ่นเพียง google "มีอะไรใหม่ใน Django" ความนิยมจะทำเอกสารอย่างละเอียดถึงการคัดค้านและการเปลี่ยนแปลงทั้งหมด:

เมื่อ webapp ทำงานได้ดีบน Django 1.11 กับการทดสอบทั้งหมดผ่าน (คุณ ทำมีชุดทดสอบใช่มั้ย?) แล้วคุณสามารถทำหลาม 3 แปลงขณะที่การรักษารุ่น Django เดียวกัน Django 1.11 รองรับ Python 3.7 ได้ซึ่งจะเป็นเวอร์ชั่นที่ดีในการกำหนดเป้าหมาย คาดหวัง unicode ทั่วสถานที่เนื่องจากการแปลงโดยนัยระหว่างไบต์และข้อความหายไปในขณะนี้และเว็บแอพ Python 2 จำนวนมากอาศัยสิ่งนั้น

เมื่อโครงการดูเหมือนว่าจะทำงานได้ดีบน Django 1.11 และ Python 3.7 คุณสามารถคิดเกี่ยวกับการอัพเกรดเป็น Django 3.0 ทำตามกระบวนการเดียวกับก่อน - อ่านบันทึกประจำรุ่นทำการเปลี่ยนแปลงที่จำเป็นใช้งานชุดทดสอบและเช็คเอาท์ webapp ในเซิร์ฟเวอร์ dev ด้วยตนเอง


1
ทางไปแน่นอน รับรหัสทดสอบของคุณเพื่อรันทั้ง 2.7 และ 3.x คุณสามารถมี virtualenvs ได้ 2 ตัวชี้ไปที่ git repo pip install -Eเดียวกัน เมื่อการทดสอบหน่วยทำงานแล้วให้เริ่มต้นใช้งานการทดสอบ Django-on-3x และให้รหัสทำงานใน 2 และ 3 อีกครั้งด้วยการเข้ารหัสอย่างระมัดระวังและระมัดระวังไม่ให้เผา 2.7 บริดจ์ของคุณ - ไม่มีสตริง f เช่น - สวิตช์จะเป็น ต้านมะเร็งมาก เมื่อ 3.x เสถียรทั้งหมดให้เริ่มใช้รหัส 3.x เท่านั้น ข้อได้เปรียบคือการผลิต 2.7 อยู่ในขั้นตอนจนกว่าจะเปลี่ยน
JL Peyret

2

ฉันจะอัพเกรดเป็น py3 ก่อน คุณจะต้องดูsetup.pyใน repo Django ในสาขามั่นคง / 1.9.x ( https://github.com/django/django/blob/stable/1.9.x/setup.py) ) เพื่อหา py3 รุ่นที่รองรับคือ 3.4 (ตาย) และ 3.5

เมื่อคุณใช้ py3.5 และ Django 1.9 คุณสามารถอัปเกรดทีละครั้งจนกว่าคุณจะได้รับเวอร์ชันที่คุณต้องการจะจบ เช่น Django 1.11 รองรับ py3.5 และ py3.7 ดังนั้น

py27/dj19 -> py35/dj19 -> py35/dj1.11 -> py37/dj1.11 ... -> py37/dj2.2

dj2.2 เป็นรุ่นแรกที่รองรับ py3.8 แต่ฉันอาจหยุดที่ py37 / dj2.2 หากคุณทำงานในสภาพแวดล้อมที่อนุรักษ์นิยมตามปกติ

หากคุณมีแพ็คเกจอื่น ๆ คุณจะต้องค้นหาชุดค่าผสมเวอร์ชันที่จะทำงานร่วมกันในแต่ละขั้นตอน การมีแผนเป็นกุญแจสำคัญและการอัพเกรดองค์ประกอบเพียงครั้งเดียวมักจะทำให้คุณประหยัดเวลา

ห้องสมุดในอนาคต ( https://python-future.org/ ) จะช่วยคุณในสถานการณ์ที่ยุ่งยากมากมายในขณะที่คุณต้องการใช้รหัสในการทำงานทั้ง py27 และ 3.x หกก็ยอดเยี่ยมเช่นกัน ฉันจะหลีกเลี่ยงการกลิ้งเลเยอร์ความเข้ากันได้ของคุณเอง (ทำไมต้องบูรณาการล้อใหม่)

หากเป็นไปได้ให้ลองทดสอบหน่วยของคุณให้ครอบคลุมมากถึง 75-85% ก่อนที่จะเริ่มและตั้งค่าการทดสอบอัตโนมัติทั้งในเวอร์ชัน "จาก" และ "เป็น" ในแต่ละขั้นตอนการอัปเกรด ตรวจสอบให้แน่ใจว่าคุณอ่านและแก้ไขคำเตือนทั้งหมดจาก Django ก่อนที่จะอัปเกรดเป็นเวอร์ชันถัดไป - Django ใส่ใจกับความเข้ากันได้แบบย้อนหลังได้น้อยมากดังนั้นโดยปกติฉันจะแนะนำให้กดปุ่มรุ่นรองทุกครั้งบนเส้นทางการอัปเกรด ความเข้ากันไม่ได้ "และรายการคัดค้านสำหรับรุ่นรองแต่ละรุ่น)

ขอให้โชคดี (เรากำลังอัปเกรดรหัสฐาน 300 + Kloc จาก py27 / dj1.7 ในขณะนี้ดังนั้นฉันรู้สึกถึงความเจ็บปวดของคุณ ;-)


1
+1 ในการครอบคลุมการทดสอบ นั่นคือการวัดที่สำคัญที่นี่ไม่ว่าวิธีการใดก็ตาม มันจะช่วยได้มากเมื่อทำการทดลองกับการเปลี่ยนแปลงรหัสที่แพร่หลายและฉันกำลังพูดถึงสิ่งนี้ในฐานะคนที่ไม่ได้เป็นแฟนของการทดสอบ TDD Red / Green คิดหาวิธีในการพื้นฐานผลลัพธ์ 2.7 ของคุณและการอัพเกรดจะง่ายขึ้นมาก
JL Peyret

2

ฉันมีปัญหาแบบเดียวกันกับโครงการของฉันและฉันได้ลองใช้ python 3.7.5 กับ Django เวอร์ชัน 2.2.7

คุณไม่ควรไปกับ python เวอร์ชันล่าสุด 3.8 หรือ Django เวอร์ชันล่าสุด 3.0 เพราะคุณอาจมีโอกาสที่ข้อผิดพลาดทุกประเภทที่คุณอาจไม่สามารถหาทางออกที่เหมาะสมสำหรับรุ่นล่าสุด


นี่ควรเป็นความคิดเห็น
Bruno

-2

คุณควรพยายามที่จะยิงสำหรับรุ่นปัจจุบัน Python 3.8 และ Django 3.0 ห้องสมุดทั้งหกจะช่วยเปลี่ยนแปลงการประชุมบางอย่าง วิธีที่คุณจะต้องทำการปรับเปลี่ยนบางอย่างเพื่อให้คุณสามารถทำให้เป็นปัจจุบัน


3
คุณเคยอัพเกรด Django หรือไม่? นี่เป็นเพียงความคิดที่ปรารถนา การไปที่ Python 3.8 และ Django 3.0 โดยตรงจาก 2.7 / 1.9 จะเป็นไปไม่ได้เลย แม้แต่การอัพเกรดรุ่นรองเช่น Django 1.9 เป็น 1.10 ก็อาจเป็นกระบวนการที่ยากลำบากโดยต้องมีการเปลี่ยนแปลงรหัสจำนวนมาก
Wim

ใช่ฉันได้รับอนุญาตฉันได้รับความหรูหราและเวลาในการทำ refactor ที่สมบูรณ์และทำให้แอปพลิเคชันเป็นปัจจุบัน อีกครั้งขนาดประยุกต์ใช้ตรรกะและเวลาที่ จำกัด เป็นปัญหาใหญ่สำหรับผู้ชายมากที่สุด แต่พวกเขาไม่เคยพูดถึงขนาดโปรแกรมหรือข้อ จำกัด ด้านเวลาดังนั้นฉันขอแนะนำความคิดของฉันของ "ทางออกที่ดีที่สุด" หรือ "คิดนึก";)
เดฟ

นอกจากนี้หากคุณต้องกังวลเกี่ยวกับสิ่งที่ Ansible และใช้งานบน LTS Ubuntu ด้วยเช่นกันคุณจะพบว่าแม้กระทั่งการสนับสนุน 3.7 ก็ยังขาดอยู่ใน Ubuntu 18.04 พอดแคสต์ด้านความปลอดภัยฉันฟังแนะนำให้ 3.8 ตั้งค่าบิตจนถึงจุดปล่อยหรือ 2 -1 สำหรับความเสี่ยงที่ไม่จำเป็น
JL Peyret

คำแนะนำพอดคาสต์ความปลอดภัยที่ดี?
เดฟ

สำหรับ Python วินาทีlistennotes.com/podcasts/talk-python-to-me/ ...... แต่ฉันคิดว่าคำเตือนของ 3.8- สำหรับ -a- ในขณะที่หนึ่งล่าสุด ธุรกิจที่มีความเสี่ยงเป็นพอดคาสต์ความปลอดภัยที่ดีและสนุกสนานโดยเฉพาะถ้าคุณติดตามความสัมพันธ์ระหว่างประเทศ ขออภัยสำหรับ downvote แต่ใช่สิ่งที่ทำงานในกรณีของคุณอาจทำให้คนอื่นในบริบทที่แตกต่างกัน สำหรับการแปลง 2 ถึง 3 ดู listennotes.com/podcasts/talk-python-to-me/…
JL Peyret
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.