Khởi tạo đa môi trường cho python project
Bài viết nhằm giải quyết vấn nạn khi bạn chạy 1 python project ngon lành trên máy mình mà đem sang máy khác thì chết tức tưởi do thiếu các gói (requirement packages)
Giải pháp 1: giải pháp hiện đại. Sử dụng gói pipenv
pipenv
là trình quản lý các gói của python thông qua Pipfile
, tương tự như npm
, yarn
, bundler
, cocoapods
, carthage
, composer
Để cài đặt pipenv
có 2 cách
- Cách 1 (khuyến khích): cài trực tiếp lên hệ thống, cần yêu cầu quyền root. Sử dụng lệnh
sudo pip install pipenv
- Cách 2: Cài đặt trong môi trường user hiện tại. Không yêu cầu quyền root nhưng yêu cầu thư mục
$HOME/.local/bin
phải nằm trong danh sách thư mục của biến môi trường$PATH
. Sử dụng lệnh:pip install --user pipenv
- Để sử dụng cách 2, cần phải thêm đường dẫn
$HOME/.local/bin
vào biến môi trường$PATH
, bằng cách thêm dòng sau vào file$HOME/.profile
(lưu ý không phải là file$HOME/.bashrc
, còn trường hợp bạn sử dụng zsh thì dùng file$HOME/.zprofile
)
export $PATH="$HOME/.local/bin:$PATH"
Sử dụng pipenv
khá đơn giản
- Dùng lệnh
pipenv install
để khởi tạo môi trường cho dự án mới. Phiên bản python được sử dụng cho dự án này chính là phiên bản được sử dụng để cài đặt góipipenv
. Vậy nên yêu cầu khi chạy dự án trên máy khác, thì trên máy chủ đó cũng cần yêu cầu phải cài đặt phiên bản python khớp với phiên bản ban đầu này - Để cài đặt thêm gói mới dùng lệnh
pipenv install <package name>
- Khởi động môi trường shell mới mà sử dụng các gói được thiết lập riêng trong dự án này. Dùng lệnh
pipenv shell
- Hoặc chạy các lệnh trong môi trường riêng cho dự án này mà không cần khởi tạo shell bằng
pipenv run <command>
Khi sao chép và chạy dự án trên máy mới, với pipenv
bạn ko cần phải sao chép toàn bộ các gói yêu cầu, mà chỉ cần sao chép dự án với file Pipfile
và Pipfile.lock
rồi sử dụng lệnh pipenv install
trên máy mới, các gói yêu cầu sẽ được tự động cài đặt
Giải pháp 2: thủ công và cũ hơn giải pháp 1. Sử dụng gói virtualenv
Cài đặt gói virtualenv
, cách làm tương tự như cài đặt gói pipenv
ở "Giải pháp 1"
- Để khởi tạo môi trường mới:
virtualenv <dir name>
. Lưu ý thư mục được chọn không nhất thiết và không nên được lưu vào dự án. Mà chỉ nên nằm trong thư mục bên ngoài dự án, chẳng hạn$HOME/python-envs/myproject-a
- Kích hoạt môi trường:
source <dir name>/bin/activate
- Sau khi kích hoạt môi trường, các gói pip sẽ được quản lý độc lập, không bị phụ thuộc vào các gói trên máy chủ. Tiến hành cài đặt các gói thông qua
pip install <package>
- Lưu trữ các gói hiện tại và phiên bản vào file
requirements.txt
:pip freeze > requirements.txt
- Ở trên máy chủ mới, cài đặt các gói yêu cầu đã được lưu trong
requirements.txt
thông qua:pip install -r requirements.txt
virtualenv
là một giải pháp quản lý các gói của python cũ hơn so với pipenv
, được sử dụng rộng rãi hơn, có cấu trúc file requirements.txt
đơn giản, tiện lợi cho người sử dụng lại do chỉ cần dùng trực tiếp với pip
. Tuy nhiên, khi phát triển thì cần phải quản trị thông qua thư mục lưu trữ file môi trường riêng biệt hoặc phải quản lý thủ công file requirements.txt
Làm thế nào để quản lý các phiên bản python khác nhau?
Sử dụng gói pyenv
Ngoài ra, có thể tham khảo thêm What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?