ทำไมต้องเป็น py และไม่ใช่ pyc หรือ pyo?


8

เมื่อฉันติดตั้งแพคเกจ python deb พูดpython-numpyไฟล์เป็นไฟล์ python แบบธรรมดา ฉันจะบอกผู้จัดการแพคเกจได้อย่างไรว่าฉันควรใช้ไฟล์ pyc หรือดีกว่า - pyo

คำตอบ:


12

คุณมีแล้วและคุณใช้อยู่แล้ว

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

ทั้งหมด.pyoและ.pycไฟล์จึงได้รับการยกเว้นเฉพาะในแพคเกจและติดแท็กเป็นข้อผิดพลาดโดย Lintian :

ไฟล์ไพ ธ อนที่คอมไพล์แล้วจะต้องไม่รวมอยู่ในแพ็คเกจ ไฟล์เหล่านี้ควรถูกลบออกจากแพ็คเกจและสร้างเมื่อเวลาติดตั้งแพ็คเกจใน Postinst

อ้างถึงส่วนนโยบาย Debian Python 2.6 ( การรวบรวมโมดูลโดยย่อ ) สำหรับรายละเอียด

ความรุนแรง: จริงจังแน่นอน: แน่นอน

ในกรณีของpython-numpyการรวบรวมไบต์หลังการติดตั้งนี้จะถูกจัดการโดย debhelper hook ของ pycentral หลังจากการติดตั้งดูเหมือนว่า:

ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx  1 root root     47 Mar 20  2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r--  1 root root 251912 Aug  6 22:06 add_newdocs.pyc

ข้อมูลพื้นหลังเพิ่มเติมบางส่วน

เหตุผลที่ไฟล์.pyc/ .pyoไฟล์เหล่านี้ไม่ได้รับการรวบรวมขณะรันไทม์ระหว่างการเริ่มต้นแอปพลิเคชันครั้งแรกตามที่คุณคาดไว้มีดังต่อไปนี้

ไฟล์ Python นั้นได้รับการติดตั้งในไดเรกทอรีทั่วทั้งระบบซึ่งมีให้สำหรับผู้ใช้ทุกคนในระบบ เมื่อใดก็ตามที่ผู้ใช้เริ่มต้นแอพพลิเคชั่นตัวแปลภาษาไพ ธ อนสามารถอ่าน.pyไฟล์ได้ แต่มันไม่สามารถเขียนไปยังไดเรกทอรี (เช่น/usr/lib/python2.7/dist-packages/) นี่เป็นส่วนหนึ่งของความปลอดภัยทั่วไปในระบบ Linux ทั้งหมด ผู้ใช้ไม่ควรเขียน/usrเพียงมีสิทธิ์รูทสิ่งนี้ควรจะเป็นไปได้ ด้วยเหตุผลนี้ APT hooks จะทำการรวบรวมไฟล์ Python ให้คุณ ณ เวลาที่ทำการติดตั้ง ประการแรกเพื่อลดขนาดแพ็กเกจอันดับที่สองเพื่อให้สามารถดึงตะขอกลับคืนได้เมื่อสิ่งที่เปลี่ยนแปลงในระบบของคุณเกี่ยวกับ Python เนื่องจากจำเป็นต้องคอมไพล์ใหม่เมื่อไม่สามารถใช้ร่วมกันได้ในระหว่างการอัพเกรด

อย่างไรก็ตามสิ่งนี้จะไม่ส่งผลกระทบต่อไฟล์ไพ ธ อนที่ผู้ใช้เป็นเจ้าของซึ่งกำลังรวบรวมที่รันไทม์


ดังนั้นฉันควร/usr/share/pyshared/เขียนเอง - เพื่อเปิดใช้งานไพ ธ อนเพื่อรวบรวมไฟล์ในการเรียกใช้ครั้งแรก
Adobe

4
@Adobe อะไร ไม่! อย่าทำให้ไดเรกทอรีระบบเหล่านี้เขียนได้สำหรับผู้ใช้ การจัดการบรรจุภัณฑ์ของคุณได้รวบรวมพวกเขาไว้ให้คุณแล้ว (ตามสิ่งที่ฉันพยายามจะพูดในคำตอบของฉัน) อัปเดตตอนนี้ให้ชัดเจนยิ่งขึ้นเกี่ยวกับเรื่องนี้
gertvdijk

คุณ - ที่ฉันเพิ่งดู/usr/lib/python2.7/dist-packages/numpy- มีpycไฟล์ ฉันจำได้ว่าฉันดูที่การติดตั้งแบบ seveal - และมีไฟล์ py ธรรมดา ดังนั้นฉันจึงเรียงลำดับของ "ไม่สามารถทำซ้ำข้อผิดพลาด"
Adobe

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