Được đăng chéo từ Stack Overflow vì nó có thể lạc đề ở đó.
Tôi đang cố gắng sử dụng pipenv để phân phối ứng dụng Python tới máy chủ (trong trường hợp này là Windows, nhưng tôi cũng không chắc chắn tương tự với Linux).
trước đây tôi đã làm như sau:
- Cài đặt Python trên toàn hệ thống
cài đặt pip pipenv
sau đó cài đặt pipenv
và chạy pipenv
như bình thường. Điều này có lợi thế (tôi nghĩ) mà bất kỳ người dùng nào hoặc thực sự là một người sử dụng dịch vụ có thể chạy các lệnh này. Mục đích của tôi là ứng dụng Python thường sẽ được chạy như một dịch vụ (sử dụng nssm trên Windows) nhưng bất kỳ người dùng nào cũng có thể chạy mà không cần phải cài đặt pipenv.
Tuy nhiên, các tài liệu chính thức khuyên người dùng cài đặt để 'tránh phá vỡ các gói hệ thống' cài đặt pip --user pipenv
hoặc thông qua pipx
. Trong cả hai trường hợp, kết quả là tệp nhị phân pipenv kết thúc trong thư mục người dùng phải được thêm vào PATH trừ khi bạn muốn tham chiếu nó bằng đường dẫn đầy đủ. Thật sai lầm khi có một dịch vụ chỉ vào tệp nhị phân trong các thư mục cá nhân của tôi, tương tự như vậy, những người dùng khác sẽ phải cài đặt pipenv của riêng họ hoặc thêm các thư mục của tôi vào đường dẫn của họ. Tất cả điều này có vẻ rất kỳ lạ, nhưng có lẽ tôi đã bỏ lỡ điều gì đó. Có điều gì đó sai với cách tiếp cận của tôi? Có cách tiếp cận 'thực hành tốt nhất' để sử dụng pipenv để triển khai không?
Một số nhầm lẫn hơn nữa
Tôi đã thử nghiệm điều này thêm một chút và nhận ra rằng ngay cả khi pipenv được cài đặt ở cấp hệ thống, "virtualenv" vẫn được tạo ở cấp người dùng. Tuy nhiên, tôi thấy điều này có thể được thay đổi bằng một biến môi trường để đặt "virtualenv" vào bên trong dự án. Hơn nữa, tôi đã phát hiện ra rằng trên Windows, tôi không thể chạy pipenv để hoạt động từ một dịch vụ vì nó dường như không kích hoạt virtualenv. Thay vào đó, tôi phải tạo một tệp bó kích hoạt virtualenv và thực thi main.py, sau đó trỏ NSSM vào đó.
TLDR:
Tôi đang tìm quy trình triển khai bằng cách sử dụng pipenv để phần mềm Python chạy dưới dạng dịch vụ*. Lý tưởng nhất là tôi muốn điều này độc lập với nền tảng, vì vậy tôi có thể sử dụng quy trình làm việc tương tự trong các máy chủ Windows và Linux.
* Trên Windows, tôi định sử dụng NSSM để chạy dịch vụ, trên Linux systemd. Tôi hài lòng (ish) với những công cụ này, đó là pipenv làm tôi bối rối.