26 คะแนน โดย geniuskey 2024-07-14 | 5 ความคิดเห็น | แชร์ทาง WhatsApp

Modern Good Practices for Python Development

แนวปฏิบัติสมัยใหม่ที่ดีสำหรับ Python ของ Stuart Ellis กล่าวถึงประเด็นสำคัญที่ควรพิจารณาเมื่อพัฒนา Python โดยมีสาระสำคัญดังนี้:

การใช้งาน Python

  • หลีกเลี่ยงการใช้ Python ที่มากับระบบปฏิบัติการ: Python ที่ติดมากับระบบปฏิบัติการอาจเป็นเวอร์ชันเก่า
  • ติดตั้ง Python ด้วยเครื่องมือที่รองรับหลายเวอร์ชัน: ใช้เครื่องมืออย่าง pyenv หรือ mise
  • ใช้ Python เวอร์ชันล่าสุด: ใช้เวอร์ชันเสถียรล่าสุดเพื่อรับแพตช์ความปลอดภัยและการปรับปรุงประสิทธิภาพ
  • ใช้ pipx สำหรับรันแอปพลิเคชันของนักพัฒนา: รันแอปในสภาพแวดล้อมแบบแยกด้วย pipx
  • ใช้เครื่องมือสำหรับโปรเจ็กต์: แนะนำ PDM, Hatch, Mise, Rye

การพัฒนาโปรเจ็กต์ Python

  • จัดรูปแบบโค้ด: ใช้ Ruff
  • ลินต์โค้ด: แนะนำ Ruff
  • ทดสอบด้วย pytest: ใช้ปลั๊กอินที่เกี่ยวข้อง (pytest-randomly, pytest-cov)
  • การแพ็กเกจ: ใช้แพ็กเกจ wheel และหากจำเป็นให้ใช้อิมเมจคอนเทนเนอร์หรือ PyInstaller

ไวยากรณ์ของภาษา

  • ใช้ type hinting: PEP 484, PEP 526
  • จัดรูปแบบสตริงด้วย f-string: PEP 498
  • ใช้อ็อบเจ็กต์ datetime ที่รับรู้เขตเวลา: PEP 615
โฆษณา

การออกแบบแอปพลิเคชัน

  • ใช้ logging แทน print()
  • ใช้รูปแบบ TOML สำหรับการตั้งค่า: PEP 680
  • ใช้ asynchronous I/O เฉพาะเมื่อจำเป็นเท่านั้น

ไลบรารี

  • จัดการอินพุตบรรทัดคำสั่งด้วย argparse
  • จัดการพาธไฟล์และไดเรกทอรีด้วย pathlib
  • ใช้ os.scandir() ที่เร็วและมีประสิทธิภาพแทน os.listdir(): PEP 471
  • ใช้ subprocess เมื่อต้องรันคำสั่งภายนอก: PEP 324
  • ใช้ httpx แทน requests สำหรับเว็บไคลเอนต์

แนวปฏิบัติที่ดีสำหรับโปรเจ็กต์

โฆษณา

ดูรายละเอียดเพิ่มเติมได้ในบทความฉบับเต็ม
.
.

สรุปการสนทนาใน Hacker News เกี่ยวกับ Python Modern Practices

การสนทนาใน Hacker News เกี่ยวกับ Python Modern Practices มีการแชร์ความคิดเห็นของผู้ใช้เกี่ยวกับเครื่องมือและแนวทางต่าง ๆ ดังนี้:

  1. แนะนำให้ใช้ UV: การใช้ UV นั้นเร็ว ใช้งานง่าย และยังมีการซัพพอร์ตที่ดีเมื่อเกิดปัญหา by screye
  2. กล่าวถึง Rye: Rye รองรับการ pin และดาวน์โหลด Python interpreter และมีแผนจะรวมเข้ากับ uv by rat87
  3. เน้นความเรียบง่ายของเครื่องมือปัจจุบัน: ใช้ Mamba environment กับ pip พื้นฐานก็ไม่มีปัญหา และไม่รู้สึกว่าจำเป็นต้องเปลี่ยนเครื่องมือ by helsinki
  4. ชอบเครื่องมือพื้นฐาน: ใช้ pip, venv, virtualenvwrapper ก็สามารถแก้ปัญหาส่วนใหญ่ได้ by throwadobe
  5. ปกป้องการใช้ Pipenv: ใช้ Pipenv มาในฐานะโซลูชันแบบครบวงจร และไม่เข้าใจว่าทำไมถึงไม่ถูกใช้อย่างแพร่หลายมากกว่านี้ by routerl
  6. ปัญหาของ Poetry: รู้สึกผิดหวังกับ Poetry จากปัญหาอย่างการไม่สามารถเพิ่มตัวระบุเวอร์ชันจาก Git commit ได้ by alisonatwork
  7. Conda และ Mamba: Conda มีความสามารถในการจัดการ dependency ที่ทรงพลังกว่ามาก และ Mamba ก็เร็วกว่า by wanderingmind
  8. ปัญหาด้าน Packaging: ปัญหาการแพ็กเกจของ Python มีสาเหตุเชิงสังคมอยู่มาก และน่าจะเป็นปัญหาต่อไปเสมอ by jampekka
  9. ข้อเสนอทางเลือกแทน Pyenv: Mise เร็วกว่า Pyenv และยังรองรับโปรเจ็กต์ Node ด้วย by odie5533
  10. Pydantic model และ data class: Pydantic model มีความสามารถด้านการตรวจสอบข้อมูลที่แข็งแกร่งแต่ช้า ขณะที่ data class เบาและมีประสิทธิภาพกว่า by martinky24

ดูรายละเอียดเพิ่มเติมได้ที่การสนทนาใน Hacker News

5 ความคิดเห็น

 
kaydash 2024-07-15

ไม่มีเนื้อหาเกี่ยวกับการทำให้ไลบรารีมีขนาดเบาลงเลย
การใช้ virtual env ของ miniconda3 และลบ lib ที่ไม่ได้ใช้ออกเพื่อให้ deploy ได้แบบ portable ช่วยรับประกันประสิทธิภาพที่ดีกว่าในระบบประมวลผลแบบกระจายอย่าง yarn.

 
savvykang 2024-07-15

ทำไมถึงควรใช้ pip-tools หรือ uv ล่ะ? ไม่มีหลักฐานรองรับคำกล่าวเลยว่ามันทันสมัยหรือดีกว่า

 
savvykang 2024-07-15

ดูเหมือนว่าจะมี ปัญหาในพฤติกรรมปัจจุบันของ pip ที่ไม่สามารถระบุ build version ได้ ซึ่งเป็นเหตุผลว่าทำไมจึงต้องใส่แฮชไว้ในตัวระบุ dependency ของ pip อยู่เหมือนกันนะครับ ถ้าไม่มีบริบทแบบนี้ คู่มือที่แค่ไล่เรียงแนวทางปฏิบัติก็ดูไม่น่าโน้มน้าวใจเท่าไร

 
jwseo 2024-07-16

ปกติคุณใช้ตัวไหนเป็นหลักครับ??

 
savvykang 2024-07-16

ก่อนหน้านี้ผมทำงานโดยใช้แค่ pip freeze มาตลอด โดยคัดเลือกเฉพาะไลบรารีที่รองรับ Windows/Linux มาใช้งาน และจนถึงตอนนี้ก็ยังไม่เคยมีปัญหาที่เกิดจากการเปลี่ยนเวอร์ชันแพตช์ ถึงอย่างนั้น ตอนนี้เมื่อรู้ถึงปัญหาแล้วก็เข้าใจถึงความจำเป็นอยู่ เพียงแต่ตั้งใจว่าจะพิจารณาใช้ pip-tools หรือ uv เมื่อมันมีความสมบูรณ์มากขึ้นอีกหน่อย