โพสต์ข้ามจาก Stack Overflow เนื่องจากอาจอยู่นอกหัวข้อ
ฉันกำลังพยายามใช้ pipenv เพื่อแจกจ่ายแอปพลิเคชัน Python ไปยังเซิร์ฟเวอร์ (ในกรณีนี้คือ Windows แต่ฉันก็มีความไม่แน่นอนเหมือนกันกับ Linux)
ฉันได้ทำสิ่งต่อไปนี้ก่อนหน้านี้:
- ติดตั้ง Python ทั่วทั้งระบบ
pip ติดตั้ง pipenv
แล้ว ติดตั้ง pipenv
และ เรียกใช้ pipenv
ตามปกติ. นี้มีข้อดี(มั้ง)ที่ผู้ใช้ หรือผู้ใช้บริการอย่างแท้จริง สามารถรันคำสั่งเหล่านี้ได้ เป้าหมายของฉันคือโดยปกติแล้วแอปพลิเคชัน Python จะถูกเรียกใช้เป็นบริการ (โดยใช้ nssm บน Windows) แต่ไม่สามารถเรียกใช้โดยผู้ใช้รายใดก็ได้โดยที่พวกเขาไม่ต้องติดตั้ง pipenv
อย่างไรก็ตาม เอกสารอย่างเป็นทางการแนะนำให้ผู้ใช้ติดตั้ง 'หลีกเลี่ยงการทำลายแพ็คเกจระบบ' pip ติดตั้ง --user pipenv
หรือทาง ปิ๊กซ์
. ในทั้งสองกรณี ผลลัพธ์คือไบนารีของ pipenv สิ้นสุดในโฟลเดอร์ผู้ใช้ซึ่งต้องเพิ่มไปยัง PATH เว้นแต่คุณต้องการอ้างอิงโดยใช้เส้นทางแบบเต็ม รู้สึกผิดที่มีบริการชี้ไปที่ไบนารีในโฟลเดอร์ส่วนบุคคลของฉัน ผู้ใช้รายอื่นจะต้องติดตั้ง pipenv ของตนเองหรือเพิ่มโฟลเดอร์ของฉันไปยังเส้นทางของพวกเขา ทั้งหมดนี้ดูแปลกมาก แต่บางทีฉันอาจพลาดบางอย่างไป มีบางอย่างผิดปกติกับวิธีการของฉันหรือไม่? มีวิธี 'แนวทางปฏิบัติที่ดีที่สุด' ในการใช้ pipenv สำหรับการปรับใช้หรือไม่
ความสับสนเพิ่มเติม
ฉันได้ทดลองกับสิ่งนี้อีกเล็กน้อยและตระหนักว่าแม้เมื่อติดตั้ง pipenv ที่ระดับระบบ "virtualenvs" จะถูกสร้างขึ้นที่ระดับผู้ใช้ อย่างไรก็ตาม ฉันเห็นว่าสิ่งนี้สามารถเปลี่ยนแปลงได้ด้วยตัวแปรสภาพแวดล้อมเพื่อใส่ "virtualenv" ในโครงการ นอกจากนี้ ฉันพบว่าใน Windows ฉันไม่สามารถเรียกใช้ pipenv เพื่อทำงานจากบริการได้ เนื่องจากดูเหมือนจะไม่เปิดใช้งาน virtualenv ฉันต้องสร้างแบตช์ไฟล์ที่เปิดใช้งาน virtualenv และเรียกใช้งาน main.py จากนั้นชี้ NSSM ไปที่นั้น
TLDR:
ฉันกำลังมองหาเวิร์กโฟลว์การปรับใช้โดยใช้ pipenv เพื่อให้ซอฟต์แวร์ Python ทำงานเป็นบริการ* ตามหลักการแล้ว ฉันต้องการให้สิ่งนี้ไม่ขึ้นกับแพลตฟอร์ม ดังนั้นฉันจึงสามารถใช้เวิร์กโฟลว์ที่คล้ายกันในเซิร์ฟเวอร์ Windows และ Linux
*บน Windows ฉันต้องการใช้ NSSM เพื่อเรียกใช้บริการบน Linux systemd ฉันมีความสุข (ish) กับเครื่องมือเหล่านี้ เป็น pipenv ที่ทำให้ฉันสับสน