วิธีที่แข็งแกร่งเพื่อให้แน่ใจว่าผู้อื่นสามารถเรียกใช้โปรแกรมหลาม


17

ฉันต้องการวางโปรแกรมไพ ธ อนบน GitHub และให้ผู้อื่นดาวน์โหลดและรันบนคอมพิวเตอร์ของพวกเขาด้วยระบบปฏิบัติการที่หลากหลาย ฉันค่อนข้างใหม่กับงูใหญ่ แต่ใช้มันมากพอที่จะสังเกตได้ว่าการเอาโมดูลที่รวมกันของโมดูลที่รวมไว้เพื่อทำงานร่วมกันอาจเป็นปัญหาได้ ฉันเพิ่งค้นพบการใช้requirements.txt(สร้างpipreqsและปรับใช้กับคำสั่งpip install -r /path/to/requirements.txt) แต่รู้สึกประหลาดใจมากที่สังเกตrequirements.txtว่าไม่ได้ระบุเวอร์ชันของงูหลามที่ใช้อยู่อย่างชัดเจนดังนั้นจึงไม่ใช่โซลูชันที่สมบูรณ์ด้วยตัวเอง ดังนั้นคำถามของฉันคือต้องมีชุดข้อมูลจำเพาะ / ไฟล์ / อย่างอื่นเพื่อให้แน่ใจว่าใครบางคนที่ดาวน์โหลดโครงการของฉันจะสามารถเรียกใช้กับปัญหาที่เป็นไปได้น้อยที่สุด

แก้ไข:แผนของฉันคือการได้รับคำแนะนำจากคำตอบใดก็ตามที่มี upvotes มากที่สุด แต่จนถึงตอนนี้หลังจาก 4 คำตอบและ 127 มุมมองไม่ใช่คำตอบเดียวที่มี upvote แม้แต่คำเดียว หากคำตอบบางคำตอบไม่ดีจะเป็นประโยชน์ในการดูความคิดเห็นว่าทำไมพวกเขาถึงไม่ดี


1
สำหรับปัญหาที่เป็นไปได้น้อยที่สุดคุณเคยพิจารณา Docker (หรือวิธีแก้ปัญหาแบบตู้อื่น ๆ ) หรือไม่? docker.com
Zaccharie Ramzi

Re: Docker ... เพิ่งพบสิ่งนี้: "นักพัฒนาสามารถมั่นใจได้ว่าแอปพลิเคชันจะทำงานบนเครื่อง Linux เครื่องอื่น" - แต่ฉันต้องการให้มันทำงานบนระบบปฏิบัติการใด ๆ ( opensource.com/resources/what-docker )
Mick

โดยปกติคุณจะรองรับระบบปฏิบัติการคลาสสิคทั้งหมด: windows ( docs.docker.com/docker-for-windows ) และ mac ( docs.docker.com/docker-for-windows )
Zaccharie Ramzi

2
คำตอบที่นี่มีบริบทสูง โปรแกรม Python ทำสิ่งที่เป็นsysหรือosหรือพิมพ์ฟังก์ชันย่อยหรือมากกว่าทางคณิตศาสตร์ / การวิเคราะห์หรือไม่ อดีตสามารถเปลี่ยนแปลงได้กับแต่ละรุ่นของ Python และรุ่นต่อมาสามารถเป็นรุ่นที่ค่อนข้างอิสระ ห้องสมุดขึ้นอยู่กับอะไร? จำนวนมากและแพนด้าทำหน้าที่ได้อย่างน่าทึ่งในทุกแพลตฟอร์มดังนั้นคุณสามารถตรวจสอบว่าคุณมีเวอร์ชั่นต่ำสุดแล้ว Python เวอร์ชันหลักใด ความแตกต่างระหว่าง Python 2.x และ 3.x กับไลบรารีที่ขึ้นต่อกันนั้นยังคงยากขึ้น หากคุณเขียนโค้ดที่ดีซึ่งกำหนดเป้าหมายไปยังรุ่นใหญ่ทั่วไปซึ่งเป็นการเริ่มต้นที่ดี
dawg

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

คำตอบ:


15

คุณได้พิจารณาตั้งค่าsetup.pyไฟล์แล้วหรือยัง? มันเป็นวิธีที่สะดวกในการรวม ... ทั้งหมดของคุณเข้าด้วยกันในที่เดียว ดังนั้นสิ่งที่ผู้ใช้ของคุณต้องทำก็คือก) คัดลอก repo และ B) ที่pip install .จะรันsetup.py

มีการอภิปรายที่ดีเกี่ยวกับเรื่องนี้

เช่นเดียวกับตัวอย่างการจัดการที่เขียนโดยคนที่ร้องขอ

ควรครอบคลุมกรณีการใช้งานส่วนใหญ่ ตอนนี้ถ้าคุณต้องการทำให้สามารถกระจายได้อย่างแท้จริงแล้วคุณจะต้องพิจารณาการตั้งค่าใน PyPiซึ่งเป็นศูนย์กลางการกระจายอย่างเป็นทางการ

ยิ่งไปกว่านั้นถ้าคุณถามว่าจะทำอย่างไรให้โปรแกรม "ระบบปฏิบัติการอิสระ" ไม่มีขนาดที่เหมาะกับทุกคน ขึ้นอยู่กับสิ่งที่คุณทำกับรหัสของคุณ ต้องการการวิจัยว่าโค้ดเฉพาะของคุณมีปฏิสัมพันธ์กับระบบปฏิบัติการเหล่านั้นอย่างไร


7

มีหลายวิธีหลายวิธีหลายวิธี ฉันจะเล่นสเก็ตมากกว่าหลักการที่อยู่เบื้องหลังแต่ละและมันเป็นกรณีการใช้งาน

1. สภาพแวดล้อมแบบหลาม

มีหลายวิธีในการทำเช่นนี้ pipenvคอนโดrequirments.txtฯลฯ ฯลฯ

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

setup.pyอีกวิธีที่คล้ายกันคือ โดยทั่วไปจะใช้เพื่อแจกจ่ายไลบรารี - เช่น PyInstaller (โซลูชันอื่นที่ฉันจะกล่าวถึงด้านล่าง), หรือ numpy, หรือ wxPython หรือ PyQt5 เป็นต้น - สำหรับการนำเข้า / ใช้บรรทัดคำสั่ง คู่มือบรรจุภัณฑ์หลามนั้นค่อนข้างมีประโยชน์และมีบทช่วยสอนมากมาย (google python setup.py tutorial) คุณสามารถระบุข้อกำหนดในไฟล์เหล่านี้ได้

2. ภาชนะ

นักเทียบท่าเป็นตัวที่ใหญ่ หากคุณยังไม่เคยได้ยินฉันจะแปลกใจ google สรุปย่อเกิดขึ้นกับสิ่งนี้ซึ่งฉันจะอ้างอิงส่วนหนึ่งของ:

แล้วทำไมทุกคนถึงรักคอนเทนเนอร์และนักเทียบท่า James Bottomley ซึ่งเคยเป็น CTO ของ Parallels ในการทำเวอร์ชวลไลเซชันเซิร์ฟเวอร์และผู้พัฒนาเคอร์เนลของลีนุกซ์อธิบาย VM hypervisors เช่น Hyper-V, KVM และ Xen ทั้งหมดนี้เป็น "การจำลองฮาร์ดแวร์เสมือนจริง ความต้องการของระบบ."

อย่างไรก็ตามคอนเทนเนอร์ใช้ระบบปฏิบัติการที่ใช้ร่วมกัน ซึ่งหมายความว่าพวกเขามีประสิทธิภาพมากกว่าไฮเปอร์ไวเซอร์ในแง่ทรัพยากรระบบ แทนที่จะใช้การจำลองเสมือนของฮาร์ดแวร์คอนเทนเนอร์จะอยู่ด้านบนของอินสแตนซ์ Linux เดียว ซึ่งหมายความว่าคุณสามารถ "ทิ้งขยะ VM ไร้ประโยชน์ 99.9 เปอร์เซ็นต์ทิ้งไว้ให้คุณด้วยแคปซูลขนาดเล็กที่เรียบร้อยซึ่งบรรจุแอปพลิเคชันของคุณ"

ที่ควรสรุปให้คุณ (หมายเหตุคุณไม่จำเป็นต้องใช้ระบบปฏิบัติการเฉพาะสำหรับตู้คอนเทนเนอร์)

3. ไฟล์ที่ปฏิบัติการได้

มี 2 ​​เครื่องมือหลักที่ทำเช่นนี้ในขณะที่เขียน PyInstaller และ cx_Freeze ทั้งสองได้รับการพัฒนาอย่างแข็งขัน ทั้งคู่เป็นโอเพ่นซอร์ส

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

ส่วนตัวฉันชอบ PyInstaller - ฉันเป็นหนึ่งในนักพัฒนา PyInstaller ให้การทำงานทั้งหมดผ่านสคริปต์บรรทัดคำสั่งและสนับสนุนไลบรารีส่วนใหญ่ที่คุณสามารถนึกถึง - และสามารถขยายได้เพื่อรองรับเพิ่มเติม cx_Freeze ต้องการสคริปต์การตั้งค่า

เครื่องมือทั้งสองรองรับ windows, Linux, macOS และอื่น ๆ PyInstaller สามารถสร้าง exes ไฟล์เดียวหรือหนึ่งบันเดิลโฟลเดอร์ในขณะที่ cx_Freeze สนับสนุนเพียงหนึ่งบันเดิลโฟลเดอร์ PyInstaller 3.6 รองรับไพ ธ อน 2.7 และ 3.5-3.7 - แต่ 4.0 จะไม่รองรับไพ ธ อน 2 cx_Freeze หล่นสนับสนุนไพ ธ อน 2 เป็นรุ่นใหญ่ครั้งล่าสุด (6.0 ฉันคิดว่า)

อย่างไรก็ตามมีคุณสมบัติเกี่ยวกับเครื่องมือเพียงพอแล้ว คุณสามารถดูคนเหล่านั้นด้วยตัวเอง (ดูhttps://pyinstaller.orgและhttps://cx-freeze.readthedocs.ioสำหรับข้อมูลเพิ่มเติม)

เมื่อใช้วิธีการกระจายนี้คุณมักจะให้ซอร์สโค้ดบน GitHub repo สองสาม exes (หนึ่งสำหรับแต่ละแพลตฟอร์ม) พร้อมสำหรับการดาวน์โหลดและคำแนะนำเกี่ยวกับวิธีการสร้างรหัสลงในไฟล์ที่ปฏิบัติการได้


1

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

เว็บไซต์โครงการทำงานค่อนข้างดีในการอธิบายวิธีการใช้เครื่องมือ แต่เพื่อความสมบูรณ์ฉันจะให้คำอธิบายสั้น ๆ ที่นี่

เมื่อคุณติดตั้ง Pipenv (ตัวอย่างเช่นโดยการรันpip install --user pipenv) คุณสามารถไปที่ไดเรกทอรีของโครงการของคุณและรันpipenv --python 3.7ดังนั้น Pipenv จะสร้าง virtualenv ใหม่สำหรับโครงการของคุณสร้าง Pipfile และ Pipfile.lock (เพิ่มเติมในภายหลัง) . หากคุณไปข้างหน้าและเรียกใช้pipenv install -r requirements.txtมันจะติดตั้งแพ็กเกจทั้งหมดของคุณ ตอนนี้คุณสามารถทำpipenv shellเพื่อเปิดใช้งาน virtualenv ใหม่ของคุณหรือ a pipenv run your_main_file.pyเพียงแค่เรียกใช้โครงการของคุณ

ตอนนี้ลองมาดูเนื้อหาของ Pipfile ของคุณ มันควรเป็นสิ่งที่คล้ายกับสิ่งนี้:

[packages]
Django = "*"
djangorestframework = "*"
iso8601 = "*"
graypy = "*"
whitenoise = "*"

[requires]
python_version = "3.7"

ไฟล์นี้มีคุณสมบัติที่มนุษย์สามารถอ่านได้สำหรับการอ้างอิงของโครงการของคุณ (โปรดทราบว่ามันระบุรุ่น Python ด้วย) หาก requirements.txt ของคุณมีรุ่นที่ตรึงไว้ Pipfile ของคุณก็สามารถมีได้เช่นกัน แต่คุณสามารถใช้สัญลักษณ์แทนได้อย่างปลอดภัยเพราะเวอร์ชันที่แน่นอนจะถูกเก็บไว้ใน Pipfile.lock ตอนนี้คุณสามารถเรียกใช้สิ่งต่าง ๆ เช่นpipenv updateการปรับปรุงการอ้างอิงของคุณและอย่าลืมยอมรับ Pipfile และ Pipfile.lock กับ VCS ของคุณ

เมื่อผู้คนโคลนโครงการของคุณสิ่งที่พวกเขาต้องทำคือเรียกใช้pipenv installและ Pipenv จะดูแลส่วนที่เหลือ (อาจติดตั้ง Python เวอร์ชันที่ถูกต้องสำหรับพวกเขา)

ฉันหวังว่านี้เป็นประโยชน์. ฉันไม่ได้มีส่วนเกี่ยวข้องกับ Pipenv แต่ต้องการแบ่งปันเครื่องมือที่ยอดเยี่ยมนี้


1

หากโปรแกรมของคุณเกี่ยวกับ GUI น้อยกว่าหรือมีเว็บ GUI คุณสามารถแชร์รหัสโดยใช้ Google Colaboratory

https://colab.research.google.com/

ทุกคนสามารถรันด้วยสภาพแวดล้อมเดียวกัน ไม่จำเป็นต้องติดตั้ง


1

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

ฉันได้พัฒนาแอพพลิเคชั่นเดสก์ท็อปขนาดใหญ่อย่างแท้จริงในหลามตั้งแต่ 3 ปี มันเป็นเครื่องมือที่ใช้ GUI สร้างขึ้นบน pyqt library (python-bindings ของ QT C ++ framework)

ฉันกำลังใช้ไลบรารีบรรจุภัณฑ์ " py2exe ": เป็นส่วนขยาย distutils ที่อนุญาตให้สร้างโปรแกรมปฏิบัติการ Windows แบบสแตนด์อโลน (32- บิตและ 64- บิต) จากสคริปต์ Python; สิ่งที่คุณต้องทำคือ:

  1. ติดตั้ง py2exe: 'pip install py2exe'

  2. สร้างสคริปต์ setup.py: ใช้เพื่อระบุเนื้อหาของ EXE สุดท้าย (ชื่อ, ไอคอน, ผู้แต่ง, ไฟล์ข้อมูล, ไลบรารีที่แชร์ ฯลฯ )

  3. ดำเนินการ: python setup.py py2exe

ฉันใช้ซอฟต์แวร์"Inno Setup"เพื่อสร้างตัวติดตั้ง: การสร้างทางลัดการตั้งค่าตัวแปรสภาพแวดล้อมไอคอน ฯลฯ ...


py2exe ยังไม่ได้รับการปรับปรุงในปีที่ผ่านมา ฉันไม่สามารถหาใด ๆกิจกรรมล่าสุด ฉันคิดเอาเอง (นอกจากนี้ยังรองรับเฉพาะงูหลาม <3.4 เท่านั้นนั่นหมายถึงรองรับเฉพาะรุ่นงูหลามที่เลิกใช้แล้ว)
Legorooj

0

ฉันคิดว่าคุณสามารถใช้นักเทียบท่ากับ python ของคุณได้https://github.com/celery/celery/tree/master/docker

โปรดติดตามไฟล์และฉันคิดว่าคุณสามารถหาวิธีสร้างไฟล์นักเทียบท่าสำหรับสคริปต์ไพ ธ อนของคุณได้!


-1

เนื่องจากไม่มีคำตอบอื่น ๆ ฉันจึงต้องการเพิ่มด้านที่แตกต่างอย่างสิ้นเชิง:

การทดสอบหน่วย หรือทดสอบโดยทั่วไป

โดยปกติจะเป็นการดีหากมีการกำหนดค่าที่ดีที่รู้จัก คุณอาจต้องทดสอบชุดของแพ็คเกจที่แตกต่างกัน คุณสามารถทำได้โดยอัตโนมัติด้วยเช่นtoxหรือเป็นส่วนหนึ่งของไปป์ไลน์ CI / CD

ไม่มีกฎทั่วไปว่าควรทดสอบการรวมกันของแพคเกจใด แต่โดยทั่วไปความเข้ากันได้ของ python2 / 3 เป็นปัญหาหลัก หากคุณมีการพึ่งพาแพคเกจที่แตกต่างกันอย่างมากคุณอาจต้องลองทดสอบกับเวอร์ชั่นต่าง ๆ เหล่านี้


นี่คือสิ่งสำคัญมากของการพัฒนาซอฟต์แวร์ อย่างไรก็ตามสิ่งนี้ไม่สามารถตอบคำถามได้อย่างสมบูรณ์ การทดสอบหน่วยช่วยกระจายโปรแกรมอย่างไร
Legorooj

IMHO, OP ไม่ได้ถามเฉพาะเกี่ยวกับการกระจาย เขาถามถึงวิธีการเพื่อให้แน่ใจว่าคนอื่นสามารถเรียกใช้โปรแกรมของเขา ฉันคิดว่าการทดสอบหน่วยสามารถช่วยในการทำเช่นนั้นได้จริงเนื่องจากผู้คนอาจถูก จำกัด ในชุดของแพคเกจที่สามารถใช้ได้ โดยทั่วไปคำถามการกระจายสินค้ามีความสำคัญ (และได้รับคำตอบแล้ว) แต่ฉันคิดว่าในสถานการณ์โลกแห่งความเป็นจริงเราไม่สามารถวางใจในการสร้าง venv ทั้งหมดสำหรับแพ็คเกจเดียว - มันต้องเข้ากันได้กับการกำหนดค่ามาตรฐานอย่างน้อย
Dschoni

ฉันไม่ได้โต้แย้งว่าการทดสอบหน่วยมีค่าในการทำให้แน่ใจว่าทำงานได้อย่างถูกต้อง แต่ OP ขอให้แบ่งปันรหัสในลักษณะ "ติดตั้งง่าย" นั่นเป็นเหตุผลที่ฉันคิดว่านี่เป็นคำตอบที่ไม่ถูกต้อง - สำหรับคำถามเฉพาะนี้
Legorooj

ฉันยังคิดว่าคำถามไม่ได้เกี่ยวกับการกระจายเท่านั้น นั่นเป็นเหตุผลที่ฉันเพิ่มคำตอบนี้ หากคุณพัฒนาเช่น Windows การทดสอบ Unix นั้นเป็นสิ่งจำเป็นหากคุณต้องการตรวจสอบให้แน่ใจก่อนที่จะทำการแจกจ่าย
Dschoni

จากความอยากรู้สิ่งที่แตกต่างจากสิ่งที่ฉันเพิ่งพูดว่าอย่างไร ... making sure it runs correctly ...? การทดสอบเป็นส่วนสำคัญของการทำให้แน่ใจว่ามันจะทำงานได้อย่างถูกต้องจึงเป็นส่วนสำคัญของการเตรียมความพร้อมในการจัดจำหน่าย แต่ก็ยังคงไม่ได้อะไรจะทำอย่างไรกับจริงกระจายมัน
Legorooj

-1

ฉันจะให้ข้อมูลสรุปสั้น ๆ เกี่ยวกับโซลูชันที่มีอยู่บางอย่างเมื่อคุณต้องการเลือกแพ็คเกจ (ความรู้คือพลัง):

  1. ปฏิบัติตามแนวทางที่มีให้ในโครงสร้างโครงการของคุณอนุสัญญาเหล่านี้ได้รับการยอมรับอย่างกว้างขวางจากชุมชนหลามและมักเป็นจุดเริ่มต้นที่ดีเมื่อผู้มาใหม่เริ่มการเข้ารหัสในหลาม โดยทำตามคำแนะนำเหล่านี้ pythonists ดูโครงการ / แหล่งที่มาของคุณที่ github หรือสถานที่อื่น ๆ ที่คล้ายกันจะรู้ได้ทันทีว่าจะติดตั้งอย่างไร นอกจากนี้การอัปโหลดโครงการของคุณไปยัง pypi รวมถึงเพิ่ม CI โดยทำตามกฎเหล่านั้นจะไม่เจ็บปวด

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

  3. หากคุณยังต้องการจัดส่งโครงการของคุณให้กับผู้ใช้โดยไม่บังคับให้พวกเขาติดตั้งการพึ่งพา dev ใด ๆ และคุณสนใจการป้องกันรหัสดังนั้นคุณไม่ต้องการพิจารณาตู้แช่แข็งที่มีอยู่คุณอาจใช้เครื่องมือเช่นnuitka , shedskin , cythonหรืออันที่คล้ายกัน โดยทั่วไปแล้วการย้อนรหัสจากสิ่งประดิษฐ์ที่ผลิตโดยเครื่องมือเหล่านี้จะไม่สำคัญเลย ... การป้องกันการแคร็กในทางกลับกันเป็นเรื่องที่แตกต่างกันและถ้าคุณไม่ได้ให้ไบนารี่แบบฟิสิคัลกับผู้ใช้ปลายทางของคุณ เกี่ยวกับมันนอกจากชะลอพวกเขาลง :)

  4. นอกจากนี้ในกรณีที่คุณจะต้องใช้ภาษาภายนอกในโครงการหลามของคุณอีกลิงค์คลาสสิกที่อยู่ในใจจะhttps://wiki.python.org/moin/IntegratingPythonWithOtherLanguagesเพิ่มการสร้างระบบของเครื่องมือดังกล่าวจะ CI โดยต่อไปนี้ กฎของ 1 จะค่อนข้างง่าย

ที่กล่าวว่าฉันขอแนะนำติด bulletpoint 1 เพราะฉันรู้ว่าจะดีพอที่จะให้คุณเริ่มต้นนอกจากนี้ที่จุดเฉพาะควรครอบคลุมหลายกรณีการใช้งานที่มีอยู่สำหรับโครงการงูหลาม "มาตรฐาน"

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

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