Tóm lược
Có ba loại mô-đun chung mà bạn đang xử lý:
- Những chương trình hỗ trợ được cài đặt cho tất cả người dùng với hệ thống gói HĐH. (Điều này thậm chí có thể bao gồm các công cụ và thư viện được sử dụng bởi những người lập trình trong Python; xem bên dưới.) Đối với những công cụ này, bạn sử dụng các gói hệ điều hành nơi bạn có thể và
pip
cài đặt vào các thư mục hệ thống khi cần thiết.
- Các chương trình hỗ trợ được cài đặt bởi một người dùng cụ thể chỉ cho mục đích sử dụng của riêng cô ấy và cho các khía cạnh nhất định của việc sử dụng Python "hàng ngày" của cô ấy làm ngôn ngữ kịch bản. Đối với những thứ cô ấy sử dụng
pip --user
, có lẽ là pyenv hoặc pythonz , và các công cụ và chiến thuật tương tự.
- Những người hỗ trợ phát triển và sử dụng một ứng dụng cụ thể. Đối với những bạn sử dụng
virtualenv
(hoặc một công cụ tương tự).
Mỗi cấp độ ở đây cũng có thể nhận được hỗ trợ từ cấp độ trước. Ví dụ: người dùng của chúng tôi trong (2) có thể đang dựa vào trình thông dịch Python được cài đặt qua các gói hệ điều hành.
Đi sâu vào vấn đề này chi tiết hơn một chút:
Chương trình và gói hệ thống
Các chương trình được viết bằng Python mà bạn muốn "chỉ chạy" rất dễ dàng: chỉ cần sử dụng các công cụ cài đặt hệ điều hành và để chúng mang lại bất cứ thứ gì chúng cần; điều này không khác với một chương trình không phải là Python. Điều này có khả năng mang lại các công cụ / thư viện Python (chẳng hạn như trình thông dịch Python!) Mà người dùng trên máy của bạn có thể bắt đầu dựa vào; đây không phải là vấn đề miễn là họ hiểu được sự phụ thuộc và, lý tưởng nhất là biết các phương tiện thay thế để xử lý nó trên các máy chủ không cung cấp các phụ thuộc đó.
Một ví dụ phổ biến và đơn giản về sự phụ thuộc như vậy là một số tập lệnh cá nhân của tôi ~/.local/bin/
bắt đầu bằng #!/usr/bin/env python
. Chúng sẽ hoạt động tốt (miễn là chúng chạy trong Python 2) trên các bản cài đặt RH / CentOS 7 và hầu hết (nhưng không phải tất cả); chúng sẽ không cài đặt Debian cơ bản hoặc trên Windows. Nhiều khi tôi không thích môi trường cá nhân của mình có nhiều cách phụ thuộc vào các gói HĐH (tôi làm việc trên một số HĐH khác nhau), một cái gì đó như thế này tôi thấy khá dễ chấp nhận; kế hoạch sao lưu của tôi trên các máy chủ hiếm hoi không có Python hệ thống và không thể có được một hệ thống người dùng như được mô tả bên dưới.
Những người sử dụng trình thông dịch python hệ thống cũng thường phụ thuộc vào hệ thống pip3
. Đó là về nơi tôi thường vẽ đường phụ thuộc vào hệ thống của mình; tất cả mọi thứ từ virtualenv
phía trước tôi đối phó với chính mình. (Ví dụ: tập lệnh kích hoạt tiêu chuẩn của tôi phụ thuộc vào bất cứ thứ gì pip3
hoặc pip
nằm trong đường dẫn, nhưng tải xuống bản sao của chính nó virtualenv
để khởi động lại môi trường ảo mà nó tạo ra.
Điều đó nói rằng, có lẽ có những trường hợp hoàn toàn hợp lý để tạo thêm môi trường phát triển. Bạn có thể có các giao diện Python thành các gói phức tạp (chẳng hạn như DBMS) nơi bạn muốn sử dụng phiên bản hệ thống của nó và bạn cảm thấy tốt nhất là bạn cũng để hệ thống chọn mã thư viện Python cụ thể mà bạn sẽ sử dụng để nói chuyện với nó. Hoặc bạn có thể đang triển khai nhiều máy chủ lưu trữ với môi trường phát triển cơ bản cho lớp Python và thấy dễ dàng tự động hóa với các gói hệ thống tiêu chuẩn.
Các chương trình và gói "hàng ngày" của người dùng
Người dùng có thể có các thư viện hoặc chương trình Python không phù hợp với môi trường ảo vì họ muốn giúp tạo môi trường ảo ngay từ đầu (ví dụ: virtualenvwrapper ) hoặc chúng là những thứ bạn thường sử dụng từ dòng lệnh ngay cả khi làm công việc không phải Python. Ngay cả khi họ có khả năng cài đặt các phiên bản hệ thống này, họ có thể cảm thấy thoải mái hơn khi cài đặt phiên bản của riêng họ (ví dụ: vì họ muốn sử dụng phiên bản mới nhất của công cụ và các phụ thuộc của nó).
Nói chung pip --user
là những gì mọi người sẽ sử dụng cho việc này, mặc dù các phụ thuộc nhất định, chẳng hạn như trình thông dịch Python, yêu cầu nhiều hơn thế. pyenv và pythonz rất hữu ích để xây dựng trình thông dịch cá nhân (cho dù được cài đặt ~/.local/bin
làm trình thông dịch mặc định hay nói cách khác), và tất nhiên người ta luôn có thể xây dựng "bằng tay" từ nguồn nếu có sẵn thư viện dev.
Tôi cố gắng giữ tập hợp tối thiểu của những thứ được cài đặt ở đây: virtualenvwrapper (vì tôi sử dụng nó liên tục) và có lẽ là phiên bản mới nhất của pip. Tôi cố gắng tránh các phụ thuộc bên ngoài thư viện chuẩn hoặc trên Python 3 cho các tập lệnh cá nhân mà tôi viết sẽ được sử dụng trên nhiều máy chủ. (Mặc dù chúng ta sẽ thấy tôi có thể giữ được điều đó trong bao lâu khi tôi chuyển ngày càng nhiều các tập lệnh cá nhân này sang Python.)
Phát triển ứng dụng và môi trường thời gian chạy riêng biệt
Đây là điều virtualenv thông thường. Để phát triển, bạn hầu như luôn luôn sử dụng virtualenv để đảm bảo rằng bạn không sử dụng các phụ thuộc hệ thống hoặc thường là nhiều hơn một để kiểm tra các phiên bản Python khác nhau.
Các môi trường ảo này cũng tốt cho các ứng dụng có nhiều phụ thuộc mà bạn muốn tránh làm ô nhiễm môi trường người dùng của mình. Ví dụ, tôi thường thiết lập một virtualenv để chạy sổ ghi chép Jupyter và những thứ tương tự.