Postat încrucișat din Stack Overflow, deoarece era posibil în afara subiectului acolo.
Încerc să folosesc pipenv pentru a distribui o aplicație Python pe un server (în acest caz, este Windows, dar am o incertitudine similară cu Linux).
Am făcut anterior următoarele:
- Instalați Python la nivelul întregului sistem
pip install pipenv
Atunci instalare pipenv
și pipenv alerga
ca de obicei. Asta are avantajul (cred) ca orice utilizator sau chiar un utilizator al serviciului poate rula aceste comenzi. Scopul meu este ca aplicația Python să fie rulată în mod normal ca serviciu (folosind nssm pe Windows), dar, în caz contrar, poate fi rulată de orice utilizator fără ca acesta să fie nevoit să instaleze pipenv.
Cu toate acestea, documentele oficiale sfătuiesc un utilizator să instaleze „să evite spargerea pachetelor de sistem” pip install --user pipenv
sau prin pipx
. În ambele cazuri, rezultatul este că binarul pipenv ajunge într-un folder de utilizator care trebuie adăugat la PATH, cu excepția cazului în care doriți să îl referiți folosind calea completă. Mi se pare greșit să ai un serviciu care indică un binar în folderele mele personale, în mod similar, alți utilizatori ar trebui să-și instaleze propriul pipenv sau să adauge folderele mele la căile lor. Totul pare foarte ciudat, dar poate am omis ceva. Este ceva în neregulă cu abordarea mea? Există o abordare de „cea mai bună practică” pentru utilizarea pipenv pentru implementare?
Mai multă confuzie
Am experimentat ceva mai mult cu acest lucru și am realizat că chiar și atunci când pipenv este instalat la nivel de sistem, „virtualenvs” sunt create la nivel de utilizator. Cu toate acestea, văd că acest lucru poate fi schimbat cu o variabilă de mediu pentru a pune „virtualenv” în interiorul proiectului. În plus, am descoperit că pe Windows nu pot face pipenv rulat pentru a funcționa dintr-un serviciu, deoarece nu pare să activeze virtualenv. În schimb, a trebuit să creez un fișier batch care activează virtualenv și execută main.py, apoi indică NSSM către asta.
TLDR:
Caut un flux de lucru de implementare folosind pipenv pentru software-ul Python care să fie rulat ca serviciu*. În mod ideal, aș dori ca acesta să fie independent de platformă, astfel încât să pot folosi un flux de lucru similar în serverele Windows și Linux.
*Pe Windows intenționez să folosesc NSSM pentru a rula serviciul, pe Linux systemd. Sunt mulțumit(ă) de aceste instrumente, este pipenv care mă încurcă.