easy_install / pip หรือ apt-get


30

ตามที่ระบุไว้ในหน้า wiki ของ Ubuntu บน Railsขอแนะนำให้พลอยจัดการ Rails / Ruby dependencies ของคุณ

การปฏิบัติที่ดีที่สุดกับแพ็คเกจ Python เช่น Django คืออะไร ฉันควรติดตั้งผ่าน apt-get หรือควรให้ easy_install / pip ดึงข้อมูลจาก PyPi?

คำตอบ:


29

มีข้อโต้แย้งหลายประการ:

  1. ใช้ Repositories / PPAs เพราะจะช่วยให้คุณมีเสถียรภาพและทันสมัยด้วยการแก้ไขความปลอดภัย

    นี่เป็นเรื่องจริง ตัวอย่างเช่นหากคุณติดตั้งpython-djangoตามที่ฉันมีคุณจะได้รับการปรับปรุงความปลอดภัย นี่เป็นสิ่งที่ดีเพราะคุณต้องรักษาความฉลาดไว้ก่อน แต่คุณยังต้องทดสอบสิ่งต่าง ๆ ก่อนที่คุณจะส่งการอัพเดต (แม้ว่าการทดสอบควรจะดีในแต่ละครั้ง)

    คุณสามารถโต้แย้งว่าถ้าคุณใช้pipคุณอาจไม่เคยตรวจสอบการปรับปรุง

  2. ใช้pipเพื่อให้คุณสามารถใช้เวอร์ชัน "เสถียร" ที่เหมาะสม

    ไม่ต้องสงสัยเลยว่า: repos จะล้าหลังโลกแห่งความจริง Django เป็น 2.0 แต่ repos สำหรับรุ่น LTS ของ Ubuntu (ที่ผู้คนจำนวนมากติดกับเซิร์ฟเวอร์) คุณจะได้รับ 1.8 บน Ubuntu 16.4 lts กับ Python 2 แต่ยังได้รับการอัปเดตความปลอดภัยอยู่

    pipให้คุณล่าสุดตลอดเวลา คุณเพียงแค่ต้องอัปเดตด้วยตัวเอง

  3. การอัพเกรดการติดตั้ง Python ที่ repo ใช้อาจเป็นฝันร้าย

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

    สิ่งนี้เป็นจริงสำหรับpipแต่เมื่อpipคุณได้ทำสิ่งหนึ่งครั้ง คุณรู้ว่าอะไรเป็นสาเหตุของปัญหาเพื่อให้คุณทราบว่าจะหาการแก้ไขได้ที่ไหน

  4. pip+ virtualenvช่วยให้คุณแยกสิ่งต่าง ๆ

    virtualenvช่วยให้คุณมีสภาพแวดล้อม Python แบบพกพาเล็กน้อย สิ่งนี้ช่วยให้คุณมีสภาพแวดล้อม Python ที่แตกต่างกันมากมายที่ทำงานร่วมกันบนเครื่องเดียวกัน

    สิ่งที่เห็นได้ชัดนั้นดูเหมือนจะเป็นการบำรุงรักษาเนื่องจากคุณสามารถจัดการสภาพแวดล้อมในลักษณะเดียวกับที่คุณจัดการรหัส แม้แต่จัดเก็บสภาพแวดล้อมใน VCS ด้วย ... แต่คุณควรจำไว้ว่าการมีสิบสองตัวที่แตกต่างกันvirtualenvหมายถึงสภาพแวดล้อมทั้งสิบสองที่คุณต้องตรวจสอบและอัปเดต


แก้ไข: หลังจากอัปเกรดอนุกรมที่น่ากลัวบนเซิร์ฟเวอร์เพื่อรับจาก Lucid ไปเป็น Precise ฉันได้เปลี่ยนจาก Apt + pip (nr 1 และ 2) ไปเป็น pure pip + virtualenv (nr. 4) แบบผสม แทนที่จะมี virtualenv หนึ่งตัวต่อไซต์ฉันมีหนึ่งตัวที่ใช้ร่วมกันระหว่างไซต์โหลหรือดังนั้น ตอนนี้ใช้งานได้แล้ว

ฉันต้องเขียนสคริปต์เล็กน้อยเพื่อตรวจสอบสถานะของแพ็คเกจที่ติดตั้งด้วย pip หากมีการปรับปรุงฉันต้องใช้พวกเขาด้วยตนเอง (ซึ่งดีเพราะฉันทดสอบพวกเขาในพื้นที่ใน virtualenv ท้องถิ่น) ทั้งหมดนี้ยังคงเจ็บปวดเล็กน้อยกว่าเดิม แต่ดีกว่ามากในระยะยาว


10
  • แพคเกจจากที่เก็บ

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

    บางครั้งพวกเขายังมีการดัดแปลงเฉพาะ Ubuntu

  • pip เทียบกับ easy_install

    มีไม่มากที่จะพูดเกี่ยวกับสิ่งเหล่านี้เป็นแฮ็คเกอร์ Django James Bennett ใส่มัน:

    กรุณาเพื่อความรักของ Guido ให้หยุดใช้ setuptools และ easy_install และใช้ distutils และ pip ​​แทน

    สำหรับการสนทนาในเชิงลึกเกี่ยวกับความแตกต่างให้ดูที่บรรจุภัณฑ์โดย James Bennett (จาก django) และการแก้ไขเพียงเล็กน้อยเพื่อ“ บนบรรจุภัณฑ์”โดย Ian Bicking (จาก mozilla)

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

เดี๋ยวก่อนนะฉันเชื่อว่าบางคนจะไม่เห็นด้วยกับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.