คำถามติดแท็ก ctypes

12
การห่อไลบรารี C ใน Python: C, Cython หรือ ctypes?
ฉันต้องการเรียกไลบรารี C จากแอปพลิเคชัน Python ฉันไม่ต้องการห่อทั้ง API เฉพาะฟังก์ชันและประเภทข้อมูลที่เกี่ยวข้องกับกรณีของฉัน ตามที่เห็นฉันมีสามตัวเลือก: สร้างโมดูลส่วนขยายจริงใน C. อาจเป็นไปได้มากเกินไปและฉันยังต้องการหลีกเลี่ยงค่าใช้จ่ายในการเรียนรู้การเขียนส่วนขยาย ใช้Cythonเพื่อแสดงส่วนที่เกี่ยวข้องจาก C library ไปยัง Python ทำสิ่งทั้งหมดใน Python ctypesเพื่อใช้สื่อสารกับไลบรารีภายนอก ฉันไม่แน่ใจว่า 2) หรือ 3) เป็นตัวเลือกที่ดีกว่าหรือไม่ ข้อได้เปรียบของ 3) คือctypesส่วนหนึ่งของไลบรารีมาตรฐานและโค้ดผลลัพธ์จะเป็น Python แท้ๆ - ถึงแม้ว่าฉันไม่แน่ใจว่าประโยชน์นั้นใหญ่เพียงใด มีข้อดี / ข้อเสียมากกว่าทั้งสองทางเลือกหรือไม่? คุณแนะนำวิธีใด แก้ไข:ขอบคุณสำหรับคำตอบทั้งหมดของคุณพวกเขาให้ทรัพยากรที่ดีสำหรับทุกคนที่ต้องการทำสิ่งที่คล้ายกัน แน่นอนว่าการตัดสินใจยังคงต้องทำในกรณีเดียว - ไม่มีใครตอบ "นี่คือสิ่งที่ถูกต้อง" สำหรับกรณีของฉันเองฉันอาจจะไปกับ ctypes แต่ฉันก็ตั้งตารอที่จะลอง Cython ในโครงการอื่น เมื่อไม่มีคำตอบที่แท้จริงเพียงคำเดียวการยอมรับคำตอบก็ค่อนข้างเป็นการสุ่ม ฉันเลือกคำตอบของ FogleBird เพราะให้ข้อมูลเชิงลึกที่ดีเกี่ยวกับ ctypes …
284 python  c  ctypes  cython 

3
ctypes - ระดับเริ่มต้น
ฉันมีภารกิจในการ "ตัด" ไลบรารี ac ลงในคลาส python เอกสารมีความคลุมเครืออย่างไม่น่าเชื่อในเรื่องนี้ ดูเหมือนว่าพวกเขาคาดหวังว่าจะมีเพียงผู้ใช้ python ขั้นสูงเท่านั้นที่ใช้ ctypes ได้ ฉันเป็นมือใหม่ใน python และต้องการความช่วยเหลือ ความช่วยเหลือทีละขั้นตอนจะดีมาก ฉันจึงมีห้องสมุด c ของฉัน ฉันจะทำอย่างไร? ฉันวางไฟล์อะไรไว้ที่ไหน ฉันจะนำเข้าไลบรารีได้อย่างไร ฉันอ่านพบว่าอาจมีวิธี "ตัดอัตโนมัติ" เป็น Python? (โดยวิธีการที่ฉันทำแบบฝึกหัด ctypes บน python.net และไม่ได้ผลหมายความว่าฉันคิดว่าพวกเขาคิดว่าฉันควรจะสามารถเติมเต็มขั้นตอนที่เหลือได้ อันที่จริงนี่เป็นข้อผิดพลาดที่ฉันได้รับจากรหัสของพวกเขา: File "importtest.py", line 1 >>> from ctypes import * SyntaxError: invalid syntax ฉันสามารถใช้ความช่วยเหลือทีละขั้นตอนในเรื่องนี้ได้จริงๆ! ขอบคุณ ~
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.