- Giúp chuyển đổi dễ dàng giữa nhiều phiên bản Python
- Tuân theo triết lý công cụ UNIX truyền thống: đơn giản, không phô trương và hoạt động tốt cho một mục đích duy nhất
- Dự án này được tách nhánh từ rbenv và ruby-build rồi chỉnh sửa cho phù hợp với Python
pyenv làm gì
- Có thể thay đổi phiên bản Python toàn cục theo từng người dùng.
- Hỗ trợ phiên bản Python theo từng dự án.
- Có thể ghi đè phiên bản Python bằng biến môi trường.
- Có thể tìm kiếm lệnh Python của nhiều phiên bản cùng lúc. Hữu ích khi dùng tox để kiểm thử giữa các phiên bản Python.
pyenv không làm gì...
- Không phụ thuộc vào chính Python. pyenv được tạo bằng shell script thuần.
- Không cần được nạp vào shell. Thay vào đó, nó dùng cách tiếp cận shim bằng cách thêm một thư mục vào
PATH.
- Không quản lý virtualenv. Tất nhiên, người dùng có thể tự tạo virtualenv hoặc dùng pyenv-virtualenv để tự động hóa.
Cách hoạt động
- pyenv chặn các lệnh Python bằng các tệp thực thi shim được chèn vào
PATH, xác định phiên bản Python mà ứng dụng chỉ định, rồi chuyển tiếp lệnh đến bản cài đặt Python tương ứng.
Hiểu về PATH
- Khi chạy một lệnh như
python hoặc pip, hệ điều hành sẽ tìm tệp thực thi có tên đó trong danh sách thư mục nằm trong biến môi trường PATH.
Hiểu về Shims
- pyenv chèn thư mục shims lên đầu
PATH. Thông qua quá trình rehashing, nó duy trì các shim cho mọi lệnh Python của tất cả các phiên bản Python đã cài đặt.
Hiểu về cách chọn phiên bản Python
- Khi chạy một shim, pyenv sẽ đọc và sử dụng phiên bản Python từ các nguồn sau theo thứ tự:
- Biến môi trường
PYENV_VERSION (nếu được chỉ định).
- Tệp
.python-version dành riêng cho ứng dụng trong thư mục hiện tại (nếu có).
- Tệp
.python-version đầu tiên tìm được khi tìm kiếm qua từng thư mục cha cho đến khi chạm tới thư mục gốc của hệ thống tệp (nếu có).
- Tệp toàn cục
$(pyenv root)/version.
Tìm vị trí cài đặt Python do Pyenv cung cấp
- pyenv chuyển tiếp lệnh đến bản cài đặt Python tương ứng theo phiên bản Python mà nó đã xác định.
- Mỗi phiên bản Python được cài trong thư mục riêng bên dưới
$(pyenv root)/versions.
Cách dùng
Cài thêm phiên bản Python
- Dùng
pyenv install để cài thêm các phiên bản Python.
Tự động phân giải sang phiên bản mới nhất
- Mọi lệnh con của Pyenv, ngoại trừ
uninstall, đều tự động phân giải toàn bộ tiền tố sang phiên bản mới nhất.
Phiên bản Python có hỗ trợ mở rộng
- Có các bản phát hành Python áp dụng bản vá do người dùng cung cấp để bổ sung hỗ trợ trong những môi trường cụ thể.
Chuyển đổi giữa các phiên bản Python
- Để dùng Python do Pyenv cài đặt, hãy chạy một trong các lệnh sau:
pyenv shell
pyenv local
pyenv global
Gỡ phiên bản Python
- Theo thời gian, các phiên bản Python sẽ tích lại trong thư mục
$(pyenv root)/versions.
- Để xóa phiên bản Python cũ, dùng
pyenv uninstall .
Các tác vụ khác
- Để xem danh sách mọi lệnh con hiện có, hãy chạy
pyenv commands.
Gỡ bỏ pyenv
- Có thể dễ dàng tạm thời vô hiệu hóa hoặc gỡ Pyenv khỏi hệ thống.
Plugin Pyenv
- Có thể dùng plugin để mở rộng và tùy biến tính năng của Pyenv theo cách đơn giản, linh hoạt và dễ bảo trì.
Cấu hình nâng cao
- Có các biến môi trường để kiểm soát hành vi của Pyenv.
Phát triển
- Mã nguồn của Pyenv được lưu trữ trên GitHub.
- Chạy kiểm thử bằng Bats.
Ý kiến của GN⁺
- pyenv là công cụ rất hữu ích để quản lý nhiều phiên bản Python. Đặc biệt phù hợp với các lập trình viên phải dùng các phiên bản Python khác nhau ở nhiều dự án.
- Công cụ này không phụ thuộc vào chính Python và được cấu thành từ shell script thuần, nên có thể cài đặt và quản lý ngay cả trên hệ thống chưa cài Python.
- pyenv không trực tiếp quản lý virtualenv, nhưng có thể tự động hóa việc quản lý virtualenv thông qua plugin pyenv-virtualenv, nên khá tiện lợi.
- Vì việc cài đặt và sử dụng tương đối đơn giản, ngay cả kỹ sư phần mềm mới bắt đầu cần quản lý phiên bản Python cũng có thể dễ dàng tiếp cận.
- Một công cụ khác cung cấp tính năng tương tự pyenv là
conda, đặc biệt được dùng rộng rãi trong lĩnh vực khoa học dữ liệu và machine learning. Vì conda cung cấp cả quản lý gói lẫn quản lý môi trường, nên có thể khuyến nghị cho những người dùng cần các tính năng đó.
- Khi áp dụng pyenv, cần cẩn thận để tránh xung đột đường dẫn nếu trên hệ thống đã cài nhiều phiên bản Python. Lợi ích của pyenv là giúp quản lý phiên bản dễ dàng hơn, nhưng cấu hình sai có thể làm ảnh hưởng tới đường dẫn Python mặc định của hệ thống.
7 bình luận
Với
conda, cần lưu ý là ở các doanh nghiệp có quy mô nhất địnhthì phải trả phí.
Dù công ty nhỏ nhưng nếu quy mô bên đặt hàng lớn thì cũng khá khó để giao hàng.
Bản thân conda là miễn phí theo giấy phép BSD, nhưng bạn nên xem kỹ giấy phép của kho lưu trữ và các gói.
Mình đặt
asdfở mức cao nhất https://asdf-vm.com/Theo từng project thì cũng có khi cấu hình bằng local, hoặc dùng container...
Dạo này có quá nhiều thứ xuất hiện để dựng + quản lý môi trường mới nên mình cũng không dùng nó nhiều lắm.. haha
Tôi cũng dùng đúng kiểu đó.
Haha, cá nhân tôi thấy pyenv có cảm giác hơi lỗi thời.
Vì cứ liên tục xuất hiện những thứ như rbenv, pyenv, nodenv nên cuối cùng cả anyenv cũng ra đời. haha
https://github.com/anyenv/anyenv
Ý kiến trên Hacker News
Cảnh báo về việc dùng pyenv
Nỗi khổ của lập trình viên Python
Các công cụ giúp giữ chương trình Python ổn định
Giới thiệu công cụ Mise
Ưu điểm của ASDF
Chia sẻ trải nghiệm dùng pyenv
python<version> -m venv /my/virtual/envsẽ ổn định hơn.Stack quản lý Python cá nhân
Quản lý phụ thuộc runtime bằng Mise
Chia sẻ workflow trên macOS
Đây có vẻ đúng là chỗ đau đớn nhất.